gpt4 book ai didi

java - Z-Buffering 通常比 Painter 算法更快吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:00 26 4
gpt4 key购买 nike

我正在使用 Java 从头开始​​制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道画家算法是否比 Z 缓冲更快的一般/平均答案。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边形弄乱,所以我可能想实现 Newell 版的 Painter 算法来切割多边形,这样它们就不会相交和弄乱。

那么我可以得到渲染单个立方体的平均速度更快的顺序吗:

Painter's Algorithm

Newell's Painter's Algorithm

Z-Buffering

另外,如果有人有任何其他好的建议我可以使用吗?

最佳答案

在计算机图形学中,画家的算法称为 Z-Sorting

有时快有时慢。这取决于您有多少对象、您渲染的分辨率有多大以及您需要的 Z 坐标精度。

Z-Buffering 更适合:

  • 高对象/多边形数

  • 动态场景(物体或相机正在移动/旋转)

    它需要与渲染图像具有相同分辨率的额外缓冲区,并且它对每个片段执行单一条件(每个多边形的渲染像素,甚至是看不见的像素)。在渲染完 3D z 坐标后,每个可见像素都可以使用,这是许多高级渲染技术所必需的。

Z-Sorting 适用于:

  • (相对)静态场景或非常低的对象/多边形数量

  • 如果可供使用的内存非常少(在 8 位计算机上,大多数 3D 应用程序都使用 Z-sorting,因为没有用于 Z-buffer 的内存)

    它需要索引缓冲区来存储所有对象/多边形索引,并且它在每个场景变化时执行排序(按 Z 坐标对许多对象进行排序可能很慢)。现在使用它是因为:

  • 透明多边形需要Z排序

  • 如果程序出于其他原因已经有 Z 排序的场景,那么它会利用它

有时这两种技术结合在一起

特别是对于 Z 坐标的高动态范围,因为标准 Z 缓冲区(24/32 位宽)在整个范围内的分辨率非常差。它可以通过使用 Z-buffer 的线性或对数刻度来部分解决,但是如果您需要在整个范围内定义精度/分辨率,则需要使用某种与 Z 排序的组合并组合更多frustrums 一起使用或使用当前 HW

不支持的具有高动态范围的自定义 Z-Buffer

关于java - Z-Buffering 通常比 Painter 算法更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513594/

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