禁用深度测试时,Java OpenGL颜色材料会变暗

时间:2010-03-26 01:32:52

标签: java opengl colors jogl depth-buffer

我一直在使用OpenGL(JOGL)中的深度缓冲区来确保某些项目通过禁用深度缓冲区呈现在其他项目之前(详见上一个问题Java OpenGL saving depth buffer)。

这是有效的,除非我在禁用深度测试时设置正在绘制的项目的颜色时,不显示任何材质光泽。该项目呈现为原始颜色的较暗版本(似乎没有真正应用于它的光照效果)。这有什么原因会发生吗?我怎么能阻止这个?

感谢, 杰夫

1 个答案:

答案 0 :(得分:2)

由于到目前为止你没有得到任何答案,我会试着试试看,虽然我真的有点猜测。

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

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

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

    < / LI>

所以我假设,如果没有深度缓冲区,就不可能正确使用照明。我想你在其他帖子中提到过,你不能只清除深度缓冲区,因为它会干扰应用程序的其余部分?我认为应该有模板的解决方案,类似于http://www.glprogramming.com/red/chapter10.html中的“例10-1:使用模板测试”(它用C语言编写,但我希望它在JOGL中类似)。模板只会阻止剩余的应用程序覆盖您的珍贵像素。