Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Opengl深度缓冲和剔除_Opengl_Culling - Fatal编程技术网

Opengl深度缓冲和剔除

Opengl深度缓冲和剔除,opengl,culling,Opengl,Culling,在OpenGL中使用背面消隐和深度缓冲有什么区别?给定的三角形有两条边,正面和背面。您正在查看的边由点在顶点列表(也称为缠绕)中的显示顺序决定。通常,三角形列表具有交替缠绕,因此可以重复使用前面的两点,但条带中给定三角形的面不会交替。背面消隐是一个优化步骤,在该步骤中,场景中朝向远离视图的三角形从要绘制的三角形列表中删除 深度缓冲区(z缓冲区)用于挂起已渲染的最近对象(深度相对于视图)。如果绘图列表中下一个出现的东西在我已经绘制的东西后面(即,它的深度使它离我更远),我可以跳过绘制,因为它被阻挡

在OpenGL中使用背面消隐和深度缓冲有什么区别?

给定的三角形有两条边,正面和背面。您正在查看的边由点在顶点列表(也称为缠绕)中的显示顺序决定。通常,三角形列表具有交替缠绕,因此可以重复使用前面的两点,但条带中给定三角形的面不会交替。背面消隐是一个优化步骤,在该步骤中,场景中朝向远离视图的三角形从要绘制的三角形列表中删除


深度缓冲区(z缓冲区)用于挂起已渲染的最近对象(深度相对于视图)。如果绘图列表中下一个出现的东西在我已经绘制的东西后面(即,它的深度使它离我更远),我可以跳过绘制,因为它被阻挡了。如果要绘制的新对象更接近,我将绘制它,并使用新的更接近的值更新深度缓冲区。

当OpenGL确定哪些面背对着查看器,因此不可见时,将进行背面消隐。想象一个立方体。无论您如何旋转立方体,3个面始终不可见。找出这些面,将它们从要绘制的多边形列表中删除,然后将绘制列表减半

深度缓冲相当简单。对于绘制的每个多边形的每个像素,将其z值与z缓冲区进行比较。如果小于z缓冲区中的值,则将z缓冲区值设置为新的z缓冲区值。如果没有,则丢弃该像素。深度缓冲提供了非常好的结果,但可能相当慢,因为每个像素都需要值查找

实际上,这两种方法没有什么相似之处,它们经常都被使用。给定一个立方体,您可以先使用消隐法剪切一半多边形,然后使用z缓冲法绘制它们


剔除可以减少渲染的多边形,但它不是一种排序算法。这就是Z缓冲。

OpenGL背面消隐不是只消隐面的背面,即立方体面内部面向面的侧面吗?(我非常肯定米凯布的回答是正确的)。