4

我一直在使用 OpenGL (JOGL) 中的深度缓冲区,以确保通过禁用深度缓冲区(在我之前的问题Java OpenGL Saving depth buffer中有详细说明)将某些项目呈现在其他项目之前。

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

谢谢,杰夫

4

1 回答 1

2

由于到目前为止您没有得到任何答案,因此我会尝试尝试一下,尽管我在这里确实有点猜测。

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

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

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

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

于 2010-03-26T16:20:07.747 回答