Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解深度测试opengl_C#_Opengl_Depth Testing - Fatal编程技术网

C# 理解深度测试opengl

C# 理解深度测试opengl,c#,opengl,depth-testing,C#,Opengl,Depth Testing,我是opengl的新手,在opengl中学习深度测试有困难。有人能给我解释一下什么是深度测试吗?我正在阅读我的文献,上面写着: “它可以隐藏被其他对象覆盖的对象 对象(按深度隐藏)。如果未启用,则 早先画的,是有盖的。” 我一点也不懂第一句话。例如,如果我必须把一些文本放在比文本面积大的四元体前面,我怎么能做到呢?如果深度测试没有启用,我会先画四元体,然后再画文本,然后文本会在quad的前面。但是当DEPTH\u TEST被启用时,该怎么办呢?我不知道它包含了什么,我不知道显示的顺序是否重要……

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

“它可以隐藏被其他对象覆盖的对象 对象(按深度隐藏)。如果未启用,则 早先画的,是有盖的。”


我一点也不懂第一句话。例如,如果我必须把一些文本放在比文本面积大的
四元体前面,我怎么能做到呢?如果
深度测试
没有启用,我会先画
四元体,然后再画文本,然后文本会在
quad
的前面。但是当
DEPTH\u TEST
被启用时,该怎么办呢?我不知道它包含了什么,我不知道显示的顺序是否重要……这可能只是关于有背面的3d对象,而那些背面可以被覆盖?我应该什么时候使用
DEPTH\u TEST

提前感谢!:)

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

它启用隐藏被其他对象覆盖的对象(按深度隐藏)。如果未启用,则覆盖先前绘制的对象

这是一个很糟糕的解释。深度测试与对象无关。它是关于分别决定每个屏幕像素的可见性

基本前提是:如果处理三维空间中的不透明对象,靠近摄影机的曲面将遮挡较远的曲面。由于我们将对象转换为相对于摄影机的某个坐标帧,因此我们通常将生成的Z值解释为深度值。(X和Y是水平轴和垂直轴,Z点“进入显示器”)

深度测试的工作原理是存储每个屏幕像素的深度值(在所谓的深度缓冲区或Z缓冲区中),在绘制到新像素之前,首先检查其关联的Z值是否低于缓冲区中已有的Z值。否则,将丢弃片段,而不将其写入帧缓冲区。如果是,则颜色和深度缓冲区将使用该片段的数据进行更新(覆盖之前绘制的内容-在该特定像素处)。该算法通常称为

这可能只是关于有背面的3d物体,而这些背面可以被覆盖

不,背面与此无关。(虽然深度测试也将处理在正面之前绘制背面的情况,但对于此类情况,启用背面消隐甚至更好)

在GL中,每个片段都有一个Z值。如果你处理二维的东西,比如文本,你只需要在一些z=const平面上工作。但是你可以选择任何你喜欢的飞机

我应该在什么时候使用深度测试

无论何时,只要您想在不能或不想按从后到前的顺序对场景中的所有基本体进行排序的地方绘制基本体,即摄影机和/或对象正在移动的三维世界。此外,
DEPTH_TEST
可用于提高性能(位于已绘制表面后面的碎片不需要着色)


还请注意,您可以随时打开或关闭测试,这样您就可以使用Z缓冲绘制一些3D场景,并禁用它来绘制一些文本覆盖,而不必关心其Z坐标。

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

它启用隐藏被其他对象覆盖的对象(按深度隐藏)。如果未启用,则覆盖先前绘制的对象

这是一个很糟糕的解释。深度测试与对象无关。它是关于分别决定每个屏幕像素的可见性

基本前提是:如果处理三维空间中的不透明对象,靠近摄影机的曲面将遮挡较远的曲面。由于我们将对象转换为相对于摄影机的某个坐标帧,因此我们通常将生成的Z值解释为深度值。(X和Y是水平轴和垂直轴,Z点“进入显示器”)

深度测试的工作原理是存储每个屏幕像素的深度值(在所谓的深度缓冲区或Z缓冲区中),在绘制到新像素之前,首先检查其关联的Z值是否低于缓冲区中已有的Z值。否则,将丢弃片段,而不将其写入帧缓冲区。如果是,则颜色和深度缓冲区将使用该片段的数据进行更新(覆盖之前绘制的内容-在该特定像素处)。该算法通常称为

这可能只是关于有背面的3d物体,而这些背面可以被覆盖

不,背面与此无关。(虽然深度测试也将处理在正面之前绘制背面的情况,但对于此类情况,启用背面消隐甚至更好)

在GL中,每个片段都有一个Z值。如果你处理二维的东西,比如文本,你只需要在一些z=const平面上工作。但是你可以选择任何你喜欢的飞机

我应该在什么时候使用深度测试

无论何时,只要您想在不能或不想按从后到前的顺序对场景中的所有基本体进行排序的地方绘制基本体,即摄影机和/或对象正在移动的三维世界。此外,
DEPTH_TEST
可用于提高性能(位于已绘制表面后面的碎片不需要着色)


另外请注意,您可以随时打开或关闭测试,这样您就可以使用Z缓冲绘制一些3D场景,并禁用它来绘制一些文本覆盖,而不必关心其Z坐标。

非常感谢您的解释,我想我现在明白了:)非常感谢您的解释,我想我现在明白了:)