我正在从头开始用Java创建3D渲染器而没有外部库。当我试图优化时,我想知道一般/平均答案是否Painter的算法比Z-Buffering更快。假设我正在渲染一个更快的同一个多维数据集。但我不想让相交的多边形陷入混乱,所以我可能想要实现Newell的版本的Painter算法,该算法可以切割多边形,使它们不会相交并陷入困境。 / p>
我可以获得一个平均更快渲染单个立方体的顺序:
如果有人有任何其他好的建议,我可以使用吗?
答案 0 :(得分:4)
在计算机图形学中,画家的算法被称为Z-Sorting
有时候有时会更快。这取决于您拥有多少个对象,渲染的分辨率有多大以及您需要的Z
坐标精度。
Z-Buffering
更适合:
动态场景(物体或相机移动/旋转)
它需要与渲染图像具有相同分辨率的额外缓冲区,并且每个片段执行单个条件(每个多边形的渲染像素甚至看不见的像素)。渲染后,每个可见像素的 3D z
坐标都可以处理,这是许多高级渲染技术所必需的。
Z-Sorting
更适合:
如果可以处理的内存非常少(在8位计算机上,大多数 3D 应用使用Z-sorting
,因为Z-buffer
没有内存
它需要索引缓冲区来存储所有对象/多边形索引,并且它对每个场景变化执行排序(按Z坐标排序许多对象可能很慢)。现在它被使用是因为:
透明多边形需要Z-sorting
有时将这两种技术结合在一起
特别是对于Z
坐标的高动态范围,因为标准Z缓冲区(24/32位宽)在整个范围内具有非常差的分辨率。它可以通过使用Z-buffer
的线性或对数标度来部分解决,但如果您需要在整个范围内定义精度/分辨率,则需要使用某种组合与Z排序并组合更多 frustrums < / strong>一起或使用具有高动态范围的自定义Z-Buffer
,当前 HW