java-Z缓冲通常比Painter的算法快吗?

我正在从头开始制作Java 3D渲染器,没有任何外部库.在尝试优化时,我想知道一个一般/平均答案,即Painter’s Algorithm是否比Z-Buffering更快.假设我要渲染一个相同的多维数据集,那将会更快.但是我不希望相交的多边形弄乱,所以我可能想实现纽厄尔版本的Painter’s Algorithm,它可以削减多边形,以免它们相交和弄乱.

因此,我能否获得一个平均速度更快的渲染单个立方体的顺序:

Painter’s Algorithm

Newell’s Painter’s Algorithm

Z-Buffering

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

解决方法:

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

有时更快,有时却没有.这取决于您拥有多少个对象,要渲染的分辨率有多大以及所需的Z坐标精度.

Z缓冲更适合:

>高对象/多边形数
>动态场景(对象或摄像机正在移动/旋转)

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

Z排序更适合:

>(相对)静态场景或极低的对象/多边形数量
>如果可用的内存很少(在8位计算机上,大多数3D应用程序都使用Z排序,因为没有用于Z缓冲区的内存)

它需要索引缓冲区来存储所有对象/多边形索引,并且在每个场景更改时都进行排序(通过Z坐标对许多对象进行排序可能很慢).现在使用它的原因是:
>透明多边形需要Z排序
>如果程序由于其他原因已经具有Z排序的场景,则可以利用它

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

特别是对于Z坐标的高动态范围,因为标准Z缓冲区(24/32位宽)在整个范围上的分辨率都非常差.可以使用Z缓冲区的线性或对数刻度来部分解决该问题,但是如果您需要在整个范围内定义精度/分辨率,则需要使用某种Z排序组合,并将更多的平截头圆锥体组合在一起,或者使用自定义Z-当前硬件不支持的具有高动态范围的缓冲器

上一篇:用Javascript对具有特定异常的对象数组进行排序


下一篇:java-根据整数对ArrayList进行排序