了解 Depth_Test opengl

Understanding Depth_Test opengl

我是 opengl 的新手,我很难学习 opengl 中的深度测试。有人能解释一下什么是 DEPTH_TEST 吗?我正在阅读我的文献,上面写着:

"It enables hiding objects which are covered by some other object(hiding by depth).If it isn't enabled,the object that is earlier painted,is covered."

我不明白 all.What 的第一句话,例如,如果我必须将一些文本放在一些 quad 的前面,而 ​​quad 的面积比该文本大,我该怎么做那?如果 DEPTH_TEST 没有启用,我会先画 quad,然后画文字,然后文字会在 quad 前面。但是当 DEPTH_TEST 已启用?我不知道那里覆盖了什么,我不知道显示顺序是否重要...这可能只是关于具有背面的 3d 对象,并且可以覆盖那些背面?什么时候应该我还是用 DEPTH_TEST 吗?
提前致谢!:)

我不知道你用的是什么文献,但是

It enables hiding objects which are covered by some other object(hiding by depth).If it isn't enabled,the object that is earlier painted,is covered.

是一个非常糟糕的解释。深度测试根本不是关于 objects 的。这是关于分别为每个屏幕像素单独决定可见性。

基本前提是:如果您在 3D 中处理不透明物体 space,离相机较近的表面会遮挡较远的表面。由于我们确实将对象转换为相对于相机的某个坐标系,因此我们通常将生成的 Z 值解释为 depth 值。 (X和Y分别是横轴和纵轴,Z点"into your monitor")。

深度测试通过为每个屏幕像素(在所谓的深度缓冲区或 Z 缓冲区中)存储深度值来工作,并且在绘制到新像素之前,首先检查它的相关 Z 值是否低于一个已经在缓冲区中。如果不是,则丢弃该片段而不写入帧缓冲区。如果是,颜色和深度缓冲区将用该片段的数据更新(覆盖之前绘制的 - 在这个特定像素处)。该算法通常称为 Z-Buffering.

Is that maybe only about 3d objects which have back sides,and that those backsides can be covered?

不,背面与此关系不大。 (虽然深度测试也会处理背面先于正面绘制的情况,但启用背面剔除对于这种情况甚至更好)。

在GL中,每个片段都会有一个Z值。如果你处理像文本这样的二维事物,你只是在某个 z=const 平面上工作。但是你可以选择任何你喜欢的飞机。

When should I use DEPTH_TEST anyway?

每当您想在不能或不想按从后到前的顺序对场景中的所有图元进行排序的地方绘制基元时,即相机 and/or 对象正在移动的 3D 世界.此外,DEPTH_TEST 可用于提高性能(位于已绘制表面后面的片段不需要着色)。

另请注意,您可以随时打开或关闭测试,这样您就可以使用 Z-Buffering 绘制一些 3D 场景,并禁用它来绘制一些文本叠加层,而无需关心其 Z 坐标。