我一直在 OpenGL (JOGL) 中使用深度缓冲区,以通过禁用深度缓冲区来确保某些项目在其他项目之前渲染(详细信息请参阅我之前的问题) Java OpenGL保存深度缓冲区).

这是有效的,除非当我设置禁用深度测试时正在绘制的项目的颜色时,不会显示任何材质光泽。该项目被渲染为原始颜色的较暗版本(似乎没有真正应用照明效果)。发生这种情况有什么原因吗?我该如何防止这种情况发生?

谢谢,杰夫

有帮助吗?

解决方案

既然到目前为止你还没有得到答案,我会尝试一下,尽管我在这里真的有点猜测。

我可以想象为什么会发生你所看到的效果的几个原因:

  • 与照明模型的环境和漫反射分量相比,镜面反射分量需要考虑眼睛相对于物体和光源的位置。因此,当 OpenGL 使用深度缓冲区时,这可能会更快。我假设,这样 - 对于要绘制的每个像素 - 它可以使用深度值来完成带有 z 分量的眼睛坐标。

  • 或许也与光衰减有关?当使用光衰减时,OpenGL 会计算光线在到达您的眼睛之前必须传播的距离(或者通过仅计算光线和物体之间的距离来简化?我不知道。)

所以我认为,如果没有深度缓冲区,就不可能正确使用照明。我想您在另一篇文章中提到,您不能只清除深度缓冲区,因为它会干扰应用程序的其余部分?我认为应该有一个带有模板的解决方案,类似于“示例 10-1:使用模板测试”中 http://www.glprogramming.com/red/chapter10.html (它是用C编写的,但我希望它在JOGL中是类似的)。模板只会阻止剩余的应用程序在您宝贵的像素上进行绘制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top