少し前に、顔が別の顔と重なっていることを判断する方法を尋ねました。アドバイスは、Zバッファを使用することでした。
ただし、現在のプロジェクトではZバッファを使用できないため、Painterのアルゴリズムを使用したいと考えています。しかし、表面がいつ他の表面の後ろまたは前にあるかについての良い手がかりはありません。私は数多くの方法を試しましたが、それらはすべてエッジケースで失敗するか、一般的なケースでも失敗します。
これは私が今まで試したソート方法のリストです:
- 各面の中点までの距離
- 各面の各頂点までの平均距離
- 各頂点の平均z値
- 各面の頂点のz値を最大化し、それらを最初に描画します
- 各面の頂点の最小z値とそれらを最後に描画
問題は、顔の距離は近いかもしれませんが、それでも遠いということです。これらの方法はすべて信頼できないようです。
編集:たとえば、次の画像では、青い点がより近いため、青い点を中点とするサーフェスが赤い点を中点とするサーフェス上にペイントされます。ただし、これは、赤い点の表面が大きく、中間点がさらに離れているためです。赤い点のある面は青い点よりも上にペイントする必要があります。なぜなら、中間点の距離は反対であるため、より近いためです。
オブジェクトを描画する順序を決定するために、Painterのアルゴリズムで正確に使用されているものは何ですか?