我对 LWJGL/OpenGL 相当陌生,我遇到了这个问题,无论我尝试什么,我都无法解决:
当我在屏幕上绘制多个立方体时,无论立方体距离“相机”有多远,光线照射到它时的亮度都是相同的。这意味着当我在屏幕上绘制大量立方体时,它们获得的光线量相同,看起来很奇怪。
Here's a GIF demonstrating what I mean.
我的源代码:http://pastebin.com/qd5dsZ89
我该如何修复它,以便光线在所有这些物体上混合而不会突然中断?
最佳答案
代码的重要部分:
// 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 个角的法线 vector 都指向外面。同一角处的所有顶点(不同面的)具有相同的法线。因此,在制作“圆形”立方体时,单个立方体上没有可见的边缘。
我会给构成立方体一侧的所有顶点相同的法线。例如,对于 x 最远的墙,对其所有面使用正常的 (1,0,0)
。
解决方案:使用正确的法 vector 对每一侧调用一次glNormal3f
。
关于java - LWJGL (Java) 中 OpenGL 的奇怪光照行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959839/