Painterのアルゴリズムで正確な結果を得る方法


14

少し前に、顔が別の顔と重なっていることを判断する方法を尋ねました。アドバイスは、Zバッファを使用することでした。

ただし、現在のプロジェクトではZバッファを使用できないため、Painterのアルゴリズムを使用したいと考えています。しかし、表面がいつ他の表面の後ろまたは前にあるかについての良い手がかりはありません。私は数多くの方法を試しましたが、それらはすべてエッジケースで失敗するか、一般的なケースでも失敗します。

これは私が今まで試したソート方法のリストです:

  • 各面の中点までの距離
  • 各面の各頂点までの平均距離
  • 各頂点の平均z値
  • 各面の頂点のz値を最大化し、それらを最初に描画します
  • 各面の頂点の最小z値とそれらを最後に描画

問題は、顔の距離は近いかもしれませんが、それでも遠いということです。これらの方法はすべて信頼できないようです。

編集:たとえば、次の画像では、青い点がより近いため、青い点を中点とするサーフェスが赤い点を中点とするサーフェス上にペイントされます。ただし、これは、赤い点の表面が大きく、中間点がさらに離れているためです。赤い点のある面は青い点よりも上にペイントする必要があります。なぜなら、中間点の距離は反対であるため、より近いためです。

ここに画像の説明を入力してください

オブジェクトを描画する順序を決定するために、Painterのアルゴリズムで正確に使用されているものは何ですか?


1
画家のアルゴリズムは、ちょうど奥から手前に引き出しています。
ジョナサンコネル

1
@ 3nixios:はい、もちろんですが、どのようにして「バックツーフロント」の順序を決定できますか?
pimvdb

1
すべてのオブジェクト、三角形、または頂点は、描画を開始するとカメラから一定の距離になります。基本的なアルゴリズムの実装(成功しましたか?)は、各三角形のカメラからのこの距離を決定し、最も遠いものから最も近いものに描画することです。それが完了したら、交差点を探して三角形を切り始める必要があります。これはまったく異なる球技です。Z-Bufferを既に使用できないのはなぜですか?:P
ジョナサンコネル

@ 3nixios:あなたは完全に正しいですが、私が直面している問題は距離の計算です。私が述べたように、私はいくつかの距離方法を試しましたが、それらはすべて完璧ではありません。この順序は、中点距離のソートから生じます:i.imgur.com/AcfCm.png
pimvdb

1
すべてのポリゴンはそのような通常のグリッド上にありますか?もしそうなら、これを改善するためにできるグリッド固有のことがあるかもしれません。
CiscoIPPhone

回答:


14

通常、ポリゴンの中点からカメラまでの距離がZソートに使用されています。ペインターのアルゴリズムは、その性質上、100%正確ではありません。どの基準点を使用しても、ソートが失敗する場合が常にあります。

ペインタのアルゴリズムを使用して正しいZソートを行う場合は、重複するポリゴンを小さなパーツにスライスし(たとえば、クアッドツリーを使用して)、これらのパーツを個別にソートする必要があります。ただし、これはCPUでかなり重くなる可能性があります。

問題をうまく示しているこのPowerpointファイルを見つけました(PDFバージョン)。


そのPowerpointのおかげで、問題の解決に役立ちました。
pimvdb

リンクが壊れています。誰でもコピーを見つけることができますか?
-Keavon

1
@キーボン編集 ファイルの有効なリンクを見つけました。
-bummzack

1

そのような場合、私にとっては常にbspツリーを使用して機能していました。bsp-treeのノードに凸のポリゴンセットができるまでシーンを分割すると、ノード内のポリゴンを簡単にソートできます。bsp-treeノードからポリゴンをソートすると、上記と同じ問題のように見えますが、それほど明確ではない条件があります-bsp-treeの構築後、すべての問題のあるケースはすでに解決されています-ノードで終了する必要があります凸性テストに合格しなければならないポリゴンのセットを作成します-このセットから1つのポリゴンから平面を選択すると、残りのポリゴンはすべて平面の前または平面の後ろにあります。この情報を使用すると、並べ替えが簡単になります-並べ替えファンクターは2つのポリゴンを受け取ります-どのハーフスペースが2番目のポリゴンに対して1番目のポリゴンであるかをチェックし、2番目のポリゴンに対するカメラの配置もチェックします。

また、正射投影と透視投影を扱う場合、ポリゴンに対するカメラの配置の側面とbspツリーのトラバースを決定するテストがわずかに異なることに注意してください。

入力ポリゴンを分割する余裕がない場合は、運が悪いと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.