OpenGL中的Z深度测试

8 opengl graphics

第一次来这里.今天坐下来自学OpenGL.但我遇到了一个似乎无法找到答案的问题.我想知道为什么深度测试似乎与OpenGL中的半透明对象不兼容.文档似乎建议您必须关闭深度测试,然后以反向距离顺序绘制对象,并且混合将正常工作.

但是为什么openGL不能只使用相同的深度测试,它总是能够找出反向距离顺序最远的东西并为你做这个?它只是框架的一个限制,还是与你在图形硬件中有效处理的东西有关,或类似的东西?

就是想.希望有人在这里澄清一下.

Dre*_*all 11

好问题.

简短的回答是Z缓冲区为帧缓冲区中的每个像素存储单个值(仅).给定"通常"操作模式(对于不透明对象 - GL_DEPTH_TEST启用,glDepthFunc设置为GL_LESS),该值将是映射到该像素的最近片段的深度.

帧缓冲区是一个"哑"设备 - 每个片段都独立于所有其他片段进行光栅化和深度测试,并且与产生它的原语的任何概念脱节.因此,没有地方可以保存有关前面的基元,深度排序等的信息,这是实现"自动透明度"功能所需要的.

您可能需要查看"场景图"以获取深度排序的帮助.这些库是在OpenGL提供的基本T&L之外添加"更高级别"功能的库.

希望这可以帮助.