繁体   English   中英

Opengl深度缓冲和剔除

[英]Opengl Depth buffer and Culling

什么是在OpenGL中使用背面剔除和深度缓冲之间的区别?

背面剔除是指OpenGL确定哪些面背向观察者,因此是看不见的。 想想一个立方体。 无论你如何旋转立方体,3个面都将永远不可见。 弄清楚这些面临哪些面,将其从要绘制的多边形列表中删除,然后将绘图列表减半。

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

实际上,这两种方法之间没有任何相似之处,它们通常都被使用。 给定一个立方体,您可以先使用剔除切出一半多边形,然后使用z缓冲绘制它们。

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

给定的三角形有两个面,即正面和背面。 您正在查看的一侧取决于点在顶点列表中出现的顺序(也称为绕组)。 通常,三角形列表具有交替缠绕,因此您可以重复使用前两个点,但条带中给定三角形的面对不会交替。 背面剔除是优化步骤,其中从要绘制的三角形列表中移除场景中远离视图的三角形。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM