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