OpenGL照明:一半的三角形不亮

时间:2013-04-06 23:14:37

标签: opengl lighting

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

0 个答案:

没有答案