2016-06-29 3 views
0

Я написал шейдер для рассеянного освещения.
Нормали вращаются с поворотом 3D-модели, и это выглядит, когда я поворачиваю модель, свет вращается.Нормальный ход с моделью

Vertex Shader

position = gl_ModelViewMatrix * gl_Vertex; 
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
normal = vec4(gl_Normal, 1.0); <--- 
gl_TexCoord[0] = gl_MultiTexCoord0; 

Фрагмент Shader

lightVector = normalize(vec4(lightPosition + cameraPosition, 1.0) - position); 
resultNormal = normalize(normal.xyz); <--- 

Как это исправить? enter image description here

+0

В каком пространстве являются нормали в изображении? Мировое пространство, пространство просмотров? Как вы их вычисляете? – BDL

+0

релевантно: http://stackoverflow.com/questions/13654401/what-is-the-logic-behind-transforming-normals-with-the-transpose-of-the-verse – PeterT

ответ

2

Вы, кажется, не превращаете нормали в gl_NormalMatrix. Кроме того, эта линия является подозрительной:

normal = vec4(gl_Normal, 1.0); 

нормали являются направление, а не позиции, поэтому их .w компонент должен быть 0.

Смежные вопросы