2013-04-29 1 views
1

Я вижу странное поведение, которое я не могу понять. По какой-то причине, когда я применяю масштаб (по оси z), моя текстурная сетка полигона становится затемненной, как если бы освещение внезапно отключилось или диффузный цвет был установлен на 0. Если я отменил масштаб (чтобы масштабирование вернулось назад до 0), затем цвет становится ярким и ярким в цвете.Почему масштабирование GLKit вызывает затемнение цвета/освещения?

* Обновление с дополнительной информацией. * Яркость кажется прекрасной, когда значения z на моих вершинах имеют исходные/инициализированные значения. Но когда я масштабируюсь вдоль оси z, это когда цвет становится тусклым (не совсем темным, но заметным изменением яркости). Я использую индексный буфер для рендеринга.

Что может вызвать этот «глюк»?

код связанный с этим здесь:

float aspect = fabsf(self.view.bounds.size.width/self.view.bounds.size.height); 
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(60.0f), aspect, 0.1f, 100.0f); 

self.effect.transform.projectionMatrix = projectionMatrix; 

// Compute the model view matrix for the object rendered with GLKit 
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 15.0f, -90.0f); 
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, rotationAngle, 0, 1, 0); 

// where g_depthScale is a value that increases based on a slider control. 
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, 0.1f, 0.1f, g_depthScale); 

self.effect.transform.modelviewMatrix = modelViewMatrix; 
+1

Наиболее распространенной ошибки, чтобы произвести это при использовании шкалы вы также масштабировать нормали. Нормализуйте нормали, чтобы они всегда имели длину 1. –

+0

@Matic. Преобразуйте этот комментарий в ответ, и награда достается вам. – AlvinfromDiaspar

+0

ОК. Я включил glEnable (GL_NORMALIZE) во время инициализации. Теперь вся текстура полностью черная. Это совершенно неожиданно! – AlvinfromDiaspar

ответ

1

Как Matic Oblak говорит, вы можете быть масштабирование нормалей, как вы масштабировать модель.

дешевый и простой способ получить всю сцену масштаба, чтобы изменить угол обзора проекционной матрицы см OpenGL ES 2.0 Pinch and Zoom

+0

Хорошо. Если это правда (я еще не проверял, что мои нормали ... которые им даже не уверены, как это сделать после их инициализации), тогда это должно быть самой глупой ошибкой. Я имею в виду, это ошибка, не так ли? – AlvinfromDiaspar