OpenGL: Specular освещение не работает при направленом освещении

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

На картинке вы можете видеть 40x40 кубов

snapshot (solid)

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

snapshot (wireframe)

Код моей программы:

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();

Заранее, спасибо


Ответы (0 шт):