gpt4 book ai didi

opengl - 使用 Z 缓冲区与根据深度确定像素优先级的优点

转载 作者:行者123 更新时间:2023-12-02 08:10:27 24 4
gpt4 key购买 nike

这更像是一个学术问题。事实上,我正在准备考试,我只是想真正理解这个概念。

请允许我解释一下上下文。当前的问题是在绘制到屏幕时将对象(或更具体地说是多边形)隐藏在彼此后面。需要进行计算来决定哪一个最后绘制并因此位于最前面。

在前几天我参加的一次讲座中,我的教授表示,根据深度值对像素进行优先级排序在计算上效率低下。然后,他向我们简要解释了 Z 缓冲区以及它们如何测试像素的深度值并将其与缓冲区中像素的深度值进行比较。这与“根据深度优先考虑像素”有什么不同。

谢谢!

最佳答案

决定片段属于哪个多边形的计算成本很高,因为这需要为每个像素找到最接近的多边形(并且在像素着色期间拥有可用的整个几何信息!)。

根据深度对整个对象进行排序是很容易的,几乎微不足道,每个对象都由许多三角形组成(一个多边形不超过一个或几个三角形)。然而,这只是一个粗略的近似值,附近的物体会重叠并产生伪影,因此需要采取一些措施使其像素完美。

这就是 z 缓冲区的用武之地。如果结果表明片段的计算深度大于 z 缓冲区中已存储的深度,则意味着该片段“位于某物后面”,因此会被丢弃。否则,片段将写入颜色缓冲区,深度值将写入 z 缓冲区。当然,这意味着当 20 个三角形在彼此后面时,那么同一个像素将被徒劳地着色 19 次。唉,运气不好。

现代图形硬件通过根据三角形顶点的插值深度在实际着色像素之前进行 z 测试来解决这个问题(这种优化显然不可能,如果计算每像素深度)。

此外,它们还采用保守的(有时是分层的,有时只是平铺的)优化,可以快速丢弃整组片段。为此,z 缓冲区保存一些附加的(您不知道的)信息,例如渲染到 64x64 矩形区域的最大深度。有了这个信息,它可以立即丢弃该屏幕区域中大于该屏幕区域的任何片段,而无需实际查看存储的深度,并且它可以完全丢弃属于所有顶点都具有更大深度的三角形的任何片段。因为,显然,其中任何一个都是不可能可见的。
这些是实现细节,而且非常特定于平台。

编辑:虽然这可能是显而易见的,但我不确定我是否把这一点说得足够清楚:当排序以利用 z 剔除时,您将执行与您所做的完全相反的画家的算法。您希望首先绘制最接近的事物(粗略地说,不必是 100% 精确),因此您不是以“最后一个站立者”的方式确定像素的最终颜色,而是以“先到先得”的方式确定像素的最终颜色已送达,且仅送达一份”。

关于opengl - 使用 Z 缓冲区与根据深度确定像素优先级的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419391/

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