gpt4 book ai didi

c# - 了解 Depth_Test opengl

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:23 25 4
gpt4 key购买 nike

我是 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."

我根本不明白第一句话。例如,如果我必须在一些 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.

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

基本前提是:如果您在 3D 空间中处理不透明物体,离相机较近的表面会遮挡较远的表面。由于我们确实将对象转换为相对于相机的某个坐标系,因此我们通常将生成的 Z 值解释为深度值。 (X 和 Y 是水平轴和垂直轴,Z 指向“您的显示器”)。

深度测试通过为每个屏幕像素(在所谓的深度缓冲区或 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?

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

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

关于c# - 了解 Depth_Test opengl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com