我正在写一个图形app,并建议使用z-buffer或painters algorithm来处理visibility problem。实现画家算法时,排列多边形的正确方法是什么?
我正在写一个HTML5画布,所以使用z缓冲区看起来非常昂贵。例如,如果它是一个500x500的画布,并且不得不循环10个多边形,那么在CPU中完成每帧2,500,000次迭代。我不知道这是一个很大的数字,但它似乎是错误的方式来做这个应用程序。
画家算法似乎更合适。基本步骤是:
1. Sort polygons based on their "z".
2. Paint all polygons, but paint the ones farthest away first.
如果我只是找到最大z(离屏幕最远),红色将被视为更远。所以它会先涂成红色,然后用橙色涂上红色,即使红色在橙色前面。
排序这些多边形的正确方法是什么?或者更一般地说,当实现画家算法时,您如何确定多边形的顺序?
编辑:this就是为什么我怕我自己的滚动Z缓存的(经过的每个像素,并随机分配它在这五年的老酷睿i7颜色〜10FPS)。
的复杂性是相同的。您可以对10个(修剪过的)三角形进行排序,并使用2.5M 2D像素操作盲目地绘制它们,或者使用z缓冲区为每个像素只添加一个z操作。只有在CG算法确定某些三角形完全被其他三角形遮挡的情况下才会带来好处。 –