问题描述
当我实现定向照明时,镜面光不起作用,尽管它适用于位置照明。我需要点亮一堵由立方体制成的墙。
在图片中,您可以看到一面由 40x40 立方体组成的墙
并且您可以看到镜面反射照明不起作用
根据大学的分配,我需要在旧的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 (将#修改为@)