我一直在使用OpenGL(JOGL)中的深度缓冲区来确保某些项目通过禁用深度缓冲区呈现在其他项目之前(详见上一个问题
Java OpenGL saving depth buffer).
这是有效的,除非我在禁用深度测试时设置正在绘制的项目的颜色时,不显示任何材质光泽.该项目呈现为原始颜色的较暗版本(似乎没有真正应用于它的光照效果).这有什么原因会发生吗?我怎么能阻止这个?
谢谢,
杰夫
最佳答案 既然到目前为止你没有得到答案,我会试着把它给我的镜头,虽然我真的有点猜测.
我能想象的几个原因,为什么你看到的效果会发生:
>与照明模型的环境和漫反射组件相比,镜面反射分量需要考虑相对于物体和光源的眼睛位置.因此,当OpenGL使用深度缓冲区时,这可能会更快.我假设,这样 – 对于每个要绘制的像素 – 它可以使用深度值来完成z分量的眼睛坐标.
>也许它也与光衰减有关?当使用光衰减时,OpenGL计算光线在到达眼睛之前必须经过的距离(或者仅通过计算光线和物体之间的距离来简化它?我不确定.)
所以我假设,如果没有深度缓冲区,就不可能正确使用照明.我想你在其他帖子中提到过,你不能只清除深度缓冲区,因为它会干扰应用程序的其余部分?我认为应该有模板的解决方案,类似于http://www.glprogramming.com/red/chapter10.html中的“例10-1:使用模板测试”(它用C语言编写,但我希望它在JOGL中类似).模板只会阻止剩余的应用程序覆盖您的珍贵像素.