Я знаю, что этот вопрос уже задавали много, но я все еще не могу сделать это правильно.
Итак, в моем вершинном шейдере мне нужно получить легкое положение и положение глаз.Вот мой код:
void main(void)
{
vec3 p = vec3 ( gl_ModelViewMatrix * gl_Vertex );
l = normalize (vec3 (gl_LightSource[0].position));
v = normalize ( vec3 ( eyePos ) - p );
n = normalize ( gl_NormalMatrix * gl_Normal );
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
В результате свет движется с движением камеры.Что именно мне нужно сделать здесь?Возможно без использования матриц non-opengl.
Есть ли пример освещения glsl с надлежащим управлением камерой?
* ОБНОВЛЕНИЕ *
БлагодаряКос, я справился с проблемой "свет движется с камерой", но вот еще одна:
У меня есть
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
ctLight -> enable();
glPushMatrix();
glTranslatef(0, 0, 0);
glRotatef(angle, 0, 1, 0);
glutSolidTeapot(2.0);
glPopMatrix();
glPushMatrix();
glTranslatef(0, 0, 8);
glRotatef(angle, 0, 1, 0);
glutSolidTeapot(2.0);
glPopMatrix();
ctLight -> disable();
glDisable(GL_LIGHT0);
Теперь второй чайник горит так же, как один в (0, 0,0).Как это исправить?
Код вершинного шейдера в случае:
void main(void)
{
vec3 p = vec3 ( gl_ModelViewMatrix * gl_Vertex ); // transformed point to world space
l = normalize ( vec3 (gl_LightSource[0].position) );
v = normalize ( - p );
h = normalize ( l + v );
n = normalize ( gl_NormalMatrix * gl_Normal ); // transformed n
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}