8

私はopenglプログラミングが初めてです。現在、洞窟シャフト形成のアニメーションを作成中です。Z 軸に沿ったシャフトのプロファイルの座標セットがあります。私の計画は、このデータから 3D メッシュを作成することであり、そのために TRIANGLE_STRIPS を使用することにしました。私がこれを行った方法は、次のような複数のストリップを作成したことです。

11----12 5------6
 | | / | | | / |
 | | / | | | / |
 9-----10 3------4
 | | / | | | / |
 | | / | | | / |
 7------8 1------2

私の質問は次のとおりです。

  1. これは正しい方法ですか?今、法線に問題があるからです。GL_SMOOTH シェーディングを使用したいのですが、そのために頂点の法線を計算する必要があることを理解していますか? しかし、私の cas 頂点では 10 と 3 は同じなので、2 つの法線があるでしょう??? 問題ありますか?複数のストリップを作成する他の方法はありますか?

  2. 複数のストリップを作成する他の方法はありますか? それとも、ストリップを使用したソリューションが最適ではないでしょうか?

  3. 別の問題は、このストリップの長さが等しくないことです。いくつかは他のものより短いです。ご協力ありがとうございました :)

4

2 に答える 2

6

まず、三角形のストリップを使用しないでください。古いハードウェアの古い概念です。単純なインデックス付き三角形リストを使用します。(最初は)簡単で高速です。あなたの質問に:

1) すべての頂点には法線があります。ポジションと同じくらいユニークで重要です。2 つの頂点の位置が異なる場合、それらは異なる頂点になります。同じことが法線にも当てはまります。位置が同じで法線が異なる頂点があります。しかし、それらは異なる頂点です。球体の頂点が立方体の頂点とどのように異なるかを考えてみてください。

2) リスト (glDrawElements) を使用します。ストリップは使用しないでください。これらのリストをキャッシング用に順序付ける最適な方法があります。nvidia と ati の開発者セクションには、サンプル コードがたくさんあります。

3) それについてはまだ心配しないでください。適切なメッシュには、ほぼ等しい面積の三角形があります。ほとんどの場合、インデックスは頂点キャッシュ (通常は少なくとも 16 エントリ) にヒットするように並べ替えられます。ストリップは、2 エントリの頂点キャッシュを最適化する方法です。

于 2011-06-01T13:55:12.520 に答える
2

まず、あなたの写真では、数字が頂点の順序を表している場合、実際には対角線が反転しています (ただし、これは小さなプレゼンテーション エラーです)。

  1. これは、頂点のほぼ均一なグリッドを除去するための最も簡単で、ほとんどの場合十分なアプローチです。その通りです。10 と 3 には同じ法線が必要なので、正しく照らすには同じ法線を与える必要があります。この場合、索引付けはあなたの味方です。3 と 10 (対応する法線) に単一の頂点を使用し、インデックス付きの三角形ストリップを使用します。インデックス 3 と 10 は同じ頂点を参照します。これは、頂点のあいまいさを解決する標準的な方法です。意味がわからない場合は、OpenGL と 3D プログラミング全般、特に頂点配列とインデックス配列についてもう少し詳しく調べてください。

  2. 通常のグリッドの場合、ストリップは非常に簡単に構築できるため、多くの場合良いアイデアです。より複雑なメッシュの場合、ドローコールの数を減らすことがより重要になることが多いため、最近ではもはや必要ありません。

  3. それらは、三角形の総数と比較して少なくとも妥当な長さである必要があります。そうでない場合、単一のストリップを描画するオーバーヘッドが、わずかに高速な頂点処理によって節約される時間を上回ってしまいますが、実際の数は実装に大きく依存します。とにかく頂点配列/バッファを使用する必要があります。パフォーマンスを気にする場合は、開始/終了から離れてください。

レンダリングされない縮退三角形を導入することで、複数のストリップを実際に 1 つにマージできます (描画呼び出しの数を減らすため)。あなたの例は、次の単一のストリップとしてレンダリングできます。

1、2、3、4、5、6、6、7、7、8、9、10、11、12 _ _

繰り返しますが、回答 3. を念頭に置いてください。縮退した三角形が実際の三角形よりも大きくなりすぎないように、ストリップは適切なサイズにする必要があります。

于 2011-05-31T17:51:44.347 に答える