OpenGL: Specular освещение не работает при направленом освещении
Когда я делаю направленный свет, то specular light не работает, хотя при позиционном освещении все работает. В задании мне нужно осветить стену из кубов. Я не как не могу догадаться почему не отображается specular освещение.
На картинке вы можете видеть 40x40 кубов

и можете видеть, что specular освещение не работает

Код моей программы:
void GLRenderSystem::setupDirectionalLight(uint32_t index, glm::vec3 direction, glm::vec3 Ia, glm::vec3 Id, glm::vec3 Is)
{
glEnable(GL_LIGHTING);
int lightIndex = GL_LIGHT0 + index;
glLightfv(lightIndex, GL_POSITION, glm::value_ptr(glm::vec4(direction, 0.0f)));
glLightfv(lightIndex, GL_AMBIENT, glm::value_ptr(Ia));
glLightfv(lightIndex, GL_DIFFUSE, glm::value_ptr(Id));
glLightfv(lightIndex, GL_SPECULAR, glm::value_ptr(Is));
}
void GLRenderSystem::configPhongMaterial(glm::vec3 Ka, glm::vec3 Kd, glm::vec3 Ks, float shininess)
{
glMaterialfv(GL_FRONT, GL_AMBIENT, glm::value_ptr(Ka));
glMaterialfv(GL_FRONT, GL_DIFFUSE, glm::value_ptr(Kd));
glMaterialfv(GL_FRONT, GL_SPECULAR, glm::value_ptr(Ks));
glMaterialf(GL_FRONT, GL_SHININESS, shininess);
}
...
rs.configPhongMaterial(glm::vec3{ 0.0, 0.5, 0.0 }, glm::vec3{ 0.0, 0.5, 0.0 }, glm::vec3{ 0.7, 0.6, 0.6 }, 120.0f);
rs.setupDirectionalLight(0, glm::vec3{ 0.7, 0.0, 35.0 }, glm::vec3{ 0.2, 0.0, 0.0 }, glm::vec3{ 1.0, 0.0, 0.1 }, glm::vec3{ 1.0,1.0,1.0 });
...
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0.0f, 0.0f, 40.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
rs.setViewMatrix(viewMatrix);
glm::mat4 projMatrix = glm::perspective(glm::radians(60.0f), 640.0f / 480.0f, 0.1f, 500.f);
rs.setProjMatrix(projMatrix);
...
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMultMatrixf(glm::value_ptr(projMatrix));
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(glm::value_ptr(viewMatrix));
glMultMatrixf(glm::value_ptr(worldMatrix));
glBegin(GL_TRIANGLES);
for (const auto& vertex : vertices)
{
glNormal3d(vertex.normal.x, vertex.normal.y, vertex.normal.z);
glColor3d(vertex.color.r, vertex.color.g, vertex.color.b);
glVertex3d(vertex.position.x, vertex.position.y, vertex.position.z);
}
glEnd();
Заранее, спасибо