2012-03-31 21 views
0

我是相当新的LWJGL/OpenGL和我已经遇到这个问题,我无法修复,无论我尝试:奇异的光影行为

当我绘制多个立方体到屏幕上时,无论距离“摄像头”多远,光线的亮度都是相同的。这意味着,当我在屏幕上绘制大量立方体时,它们会得到相同数量的光线,看起来很奇怪。

Here's a GIF demonstrating what I mean.

我的源代码:http://pastebin.com/qd5dsZ89

如何解决它,这样在所有他们的光混合没有突然断裂?

+2

[Tip](http://sscce.org/):将代码库的大小缩小为您认为可能是问题的一小部分。从那里玩它,看看你是否可以解决方案(理想)或观察你的错误可能来自哪里。要求他人阅读你的整个代码有点多。 – Makoto 2012-03-31 21:35:14

+0

你想达到什么样的照明?固定位置照明(太阳)或移动相机(手电筒)?你想让它随着距离而下降吗? – Tim 2012-03-31 21:54:29

+0

我瞄准的是一个固定的光线,随着距离而下降。我将它设置为与演示相机一起移动。 – user1248420 2012-03-31 22:00:23

回答

5

代码的最重要的一点:

  // 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一次。