LWJGL(Java)中OpenGL的奇怪光照行为

use*_*420 0 java opengl graphics lighting lwjgl

我是LWJGL/OpenGL的新手,我遇到过这个问题,无法解决,无论我尝试什么:

当我在屏幕上绘制多个立方体时,无论多维数据集与"相机"的距离有多远,它在点亮时都会达到相同的亮度.这意味着当我在屏幕上绘制大量立方体时,它们会获得相同数量的光线并且看起来很奇怪.

这是一个GIF,展示了我的意思.

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

如何修复它以使光线在所有区域中混合而不会突然中断?

Ish*_*tar 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);
Run Code Online (Sandbox Code Playgroud)

如果我正确读取,则会使立方体的8个角正常向量指向外部.同一角落的所有顶点(不同面)具有相同的法线.因此,您制作一个"圆角"立方体,单个立方体上没有可见的边缘.

我会将构成立方体一侧的所有顶点赋予相同的法线.例如,对于x-most wall,请(1,0,0)对其所有面使用法线.

解决方案:glNormal3f使用正确的法向量为每一侧调用一次.