2

メッシュがあるとします。三角形の 1 つを考えてみましょう。その三角形の隣にある三角形を知りたいとします。

実際には:

OpenGL (または 3D パイプラインの他の側面) は、この情報を何らかの方法で「認識」していますか?

隣接する三角形を見つけるために私が知っている唯一の方法は、メッシュのすべての頂点を単純に調べることです。

私の質問:

実際の 3D パイプライン レベルでは、「ハードウェア」はどの三角形が隣接しているかを認識していますか??

それとも、これらの答えを即座に与えるある種の魔法、おそらくシェーダーレベルのアプローチはありますか?

それとも、おそらく、物理学レベルで、何らかの方法で、コリジョン メッシュのどのトライが隣接しているかをすぐに認識できますか?

あるいは、カスタム シェーダーを作成することでこの情報を取得できますか?シェーダー レベルはこの情報を「認識」していますか?

低レベルの専門家、どうしたの?? ありがとう

PS もちろん、この情報が「ハードウェアから」入手できない場合、最善の方法は、メッシュの何らかの空間データベースを維持することです。十分に簡単ですが、情報がパイプライン/ハードウェアの何らかの側面から既に利用可能である場合はばかげています。ありがとう!


将来の読者のために後で注意してください。私はこの問題について、ハードウェアに取り組んでいる coupla folx と広範囲に議論しました。

答えは次のとおりです。

実際、一言で言えば、3D パイプラインは隣接する三角形を認識していません。単純なことです。Anteru が説明するように、頂点は同じ三角形内の他の 2 つに関してのみレンダリングされます。それが誰かを助けることを願っています。

4

4 に答える 4

2

いいえ、OpenGL は何が近いかを知りませんし、気にもしません。各三角形を個別にレンダリングします。隣接する三角形が関連する唯一のケースは、ジオメトリ シェーダーを使用する場合ですが、この場合、隣接情報を提供する必要があります。

レンダリングの場合、ハードウェアはどの頂点が共有されているかのみを気にするため、必要以上に頻繁にシェーディングすることはありません (つまり、頂点キャッシュに収まる場合)。

于 2011-12-09T21:04:11.367 に答える
1

Open GL についての私の理解では、Open GL は単にあなたが言ったことを描画するだけです。内部リストや階層は維持されません。いいえ、そうではありません。

于 2011-12-09T21:08:23.233 に答える
1

Open GL ES は、どの三角形が互いに「近く」にあるかを認識していない可能性がありますが、iOS デバイス ハードウェアで使用される GPU のタイルベースの遅延レンダラーは、少なくとも「同じタイル」レベルまではおそらく認識しています。ただし、この情報はアプリのコードに対して不透明です。

于 2011-12-09T23:32:52.133 に答える
0

隣接するデータ構造を作成できます。メッシュが次のように保存されている場合:

  • 頂点のリスト
  • 各三角形が頂点インデックスの 3 倍である三角形のリスト。

各頂点が、その頂点が使用される三角形インデックスのリストを作成するのは簡単です。これで、隣接する三角形をチェックするには、3 つのリストから三角形のみをテストするだけで十分です。

于 2011-12-10T10:15:54.610 に答える