我正在使用此处描述的行进立方体算法将http://paulbourke.net/geometry/polygonise/
标量场转换为三角形网格,然后使用 OpenGL 的 GL_TRIANGLES 模式显示网格。但是,我遇到了照明问题。
似乎有一半的三角形根本没有被点亮,而且它以不同的模式发生。
在下面描述的程序中,我将背景设置为红色,正面颜色为绿色,背面颜色为蓝色。有一个位置为 (1.0, 1.0, 1.0, 0.0) 的光源和一个球体以供参考。
http://i.imgur.com/JutXhbb.png
这里是翻转三角形,因为最后两个顶点的绘制顺序被切换:
http://i.imgur.com/iUgqm3N.png (背面颜色为蓝色)
真正让我困惑的是为什么翻转版本到处都有颜色,而普通版本没有。我想即使我画错了,至少翻转的版本应该反映同样的错误。知道发生了什么吗?
下面是完整的光照初始化代码:
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
GLfloat mat_color1[] = { 0.0, 0.0, 1.0, 1.0 };
GLfloat mat_color2[] = { 0.0, 1.0, 0.0, 1.0 };
glMaterialfv(GL_BACK, GL_DIFFUSE, mat_color1);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_color2);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glMaterialfv(GL_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_BACK, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);