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

标签 java opengl graphics lwjgl lighting

我对 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/

相关文章:

java - 格式化字符串的最快和最有效的方法

c++ - 使用 glutPassiveMotionFunc();在过剩

c++ - GLEW 初始化失败

c++ - 在全屏 Win32 OpenGL 中处理最小化

java - 如何从Java中的多个方法中进行绘制?

java - oracle XMLType 在数据库中不起作用

java - 使用 Rome 库获取 rss 的图像 url

java - 如何将 UTF8 属性文件与 Vaadin Bean 验证结合使用

delphi - 在GR32中使用TFloatPoint还是TFixedPoint更好?

opengl - 将着色器应用于帧缓冲区对象以获得鱼眼效果