我是LWJGL / OpenGL的新手,我遇到过这个问题,无论我尝试什么都无法修复:
当我在屏幕上绘制多个立方体时,无论多维数据集与“相机”的距离多远,光线在击中时亮度都相同。这意味着当我在屏幕上绘制大量立方体时,它们会获得相同数量的光线并且看起来很奇怪。
Here's a GIF demonstrating what I mean.
我的源代码:http://pastebin.com/qd5dsZ89
如何修复它以使光线在所有区域中混合而不会突然中断?
答案 0 :(得分: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-most wall,请对其所有面使用普通(1,0,0)
。
解决方案:使用正确的法向量为每一侧调用glNormal3f
一次。