代码的最重要的一点:
// Render a wall
glTexCoord2f(0, 0);
glNormal3f(wall.a.x > 0 ? 1 : -1, wall.a.y > 0 ? 1 : -1, wall.a.z > 0 ? 1 : -1);
glVertex3f(wall.a.x, wall.a.y, wall.a.z);
glTexCoord2f(xS, 0);
glNormal3f(wall.b.x > 0 ? 1 : -1, wall.b.y > 0 ? 1 : -1, wall.b.z > 0 ? 1 : -1);
glVertex3f(wall.b.x, wall.b.y, wall.b.z);
glTexCoord2f(xS, yS);
glNormal3f(wall.c.x > 0 ? 1 : -1, wall.c.y > 0 ? 1 : -1, wall.c.z > 0 ? 1 : -1);
glVertex3f(wall.c.x, wall.c.y, wall.c.z);
glTexCoord2f(0, yS);
glNormal3f(wall.d.x > 0 ? 1 : -1, wall.d.y > 0 ? 1 : -1, wall.d.z > 0 ? 1 : -1);
glVertex3f(wall.d.x, wall.d.y, wall.d.z);
如果我正确读取,这给你的立方体法向量的8度角指向外。同一个角上的所有顶点(不同面)都具有相同的法线。因此,您制作一个“圆形”立方体时,单个立方体上不会显示任何边缘。
我会给所有的立方体的一个顶点组成一个正常的。例如,对于最x墙,对其所有面使用正常的(1,0,0)
。
解决方法:使用正确的法向量向每一边拨打glNormal3f
一次。
[Tip](http://sscce.org/):将代码库的大小缩小为您认为可能是问题的一小部分。从那里玩它,看看你是否可以解决方案(理想)或观察你的错误可能来自哪里。要求他人阅读你的整个代码有点多。 – Makoto 2012-03-31 21:35:14
你想达到什么样的照明?固定位置照明(太阳)或移动相机(手电筒)?你想让它随着距离而下降吗? – Tim 2012-03-31 21:54:29
我瞄准的是一个固定的光线,随着距离而下降。我将它设置为与演示相机一起移动。 – user1248420 2012-03-31 22:00:23