OpenGL:镜面光不适用于方向光

问题描述

当我实现定向照明时,镜面光不起作用,尽管它适用于位置照明。我需要点亮一堵由立方体制成的墙。

图片中,您可以看到一面由 40x40 立方体组成的墙

snapshot (solid)

并且您可以看到镜面反射照明不起作用

snapshot (wireframe)

根据大学的分配,我需要在旧的opengl上完全实现这一点。

我的程序代码

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,glm::value_ptr(Ka));
    glMaterialfv(GL_FRONT,glm::value_ptr(Kd));
    glMaterialfv(GL_FRONT,glm::value_ptr(Ks));
    glMaterialf(GL_FRONT,GL_SHINInesS,shininess);
}

...

rs.configphongMaterial(glm::vec3{ 0.0,0.5,0.0 },glm::vec3{ 0.0,glm::vec3{ 0.7,0.6,0.6 },120.0f);
rs.setupDirectionalLight(0,0.0,35.0 },glm::vec3{ 0.2,glm::vec3{ 1.0,0.1 },1.0,1.0 });

...
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0.0f,0.0f,40.0f),glm::vec3(0.0f,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();

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...