6

作業中のゲーム用に小さな3Dエンジンを構築しています。基本を並べ替えました。背面がカリングされたテクスチャ三角形です。ただし、深度ソートは難しい問題であることが証明されています。

三角形の面を構成する3点を平均して面Zを計算しています。長い面は小さい面と重なることがあります。これは、Z値が大きく、深度ソートされた表示リストで上昇するためです。

これを修正するにはどうすればよいですか?プログラミングで実際的な助けしか得られないのであれば、既知の深度ソート手法があると確信しています。レンダリングパイプラインを自分で構築したので、必要なすべてのデータ(三角形、ポイント、テクスチャ、UV座標など)にアクセスできます。

3Dプログラムでレンダリングされた大聖堂

代替テキスト

私の3Dエンジンでレンダリングされた大聖堂

代替テキスト

4

3 に答える 3

6

自分で並べ替えを行うか、z バッファーを使用するかに関係なく、三角形をすべてほぼ同じサイズになるように細分化する必要があります。もちろん、z-buffer アルゴリズムが細長い三角形を分割する場合を除きます。

問題は、いくつかの小さなコンパクトな三角形といくつかの細長い三角形がある場合 (たとえば)、アルゴリズムは長くて細い三角形を頻繁に分類できないことです。三角形の中点を使用すると、実際には後ろにある場合でも、よりコンパクトなビューの「前」と見なされるビュー ポイントが存在します。+中点を表すこのトップダウン ビューを見てください。

            o

-+-            1
-----+------   2
         -+-   3

*

*大きな三角形 (2)から見るoと、小さな三角形 (3) の前にあると解釈されるため、その上に描画されます。

(2) が 3 つまたは 4 つの小さな三角形に分割された場合、Z バッファリングはより多くの時間機能します。

于 2010-09-18T14:29:46.043 に答える
5

次のいずれかを選択できます。

  1. メッシュを細分化して、各ポリゴンを確実にソートできるようにします (ただし、表示される場合と表示されない場合がある恐ろしいエッジ ケースが依然として存在します)。

  2. すべてのグラフィックス ハードウェアでサポートされ、基本的に無料のZ-Bufferを使用します。

于 2010-09-17T22:25:07.390 に答える
2

三角形の並べ替えアルゴリズムを複雑にするコーナー ケースは、次の図で表されます。

ソート不可能な三角形

各三角形は、ある三角形の前にあり、他の三角形の後ろにあります。この図を作成するためだけに、inkscape で非常に簡単なトリックを実行する必要がありました。

「前」グラフにサイクルがあるようにポリゴンを 3D に配置することは難しくありません。この問題を解決するには、アルゴリズムに三角形を細分化してサイクルを断ち切る機能が必要です。

これが、Z バッファーが非常に人気がある理由の 1 つです (そして、ハードウェアで簡単に高速化できます)。

于 2015-09-08T17:30:52.243 に答える