1

我正在使用此处描述的行进立方体算法将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);
4

0 回答 0