我正在寫一個圖形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算法確定某些三角形完全被其他三角形遮擋的情況下才會帶來好處。 –