1

レンダリングのために、入力三角形から派生した三角形ストリップのペアを送信しようとしています

ストリップは、次の頂点インデックスによって定義されます。

ストリップ 1: 0 14 16 15 1 23 30 41 8
ストリップ 2: 31 7 17 18 16 0

  14______15______23______41            7 ______18______0
  / \    /  \    /  \    /  \          /  \    /  \    /
 /   \  /    \  /    \  /    \        /    \  /    \  /
0-----16------1 ------30------8     31------17------16

これらのストリップは、次のインデックスの三角形から導出されます (これは、任意のメッシュから取得されます)。入力三角形と比較して、三角形がストリップ内で同じ巻線を持っていることを示すために、正の記号を使用します。

1 つの入力三角形をストリップ
0 14 16 +
14 15 16 -
1 16 15 +
1 15 23 -
1 23 30 +
41 30 23 -
8 30 41 +

2 つの入力三角形を除去
7 17 31 +
7 18 17 -
16 17 18 +
0 16 18 -

これらの三角形を三角形としてレンダリングすると、期待どおりの結果が得られます。つまり、三角形の可視面がすべて同じ側にある三角形ストリップのペアです (この場合、可視面は視聴者の方を向いています)。

ストリップを三角形のストリップとして個別にレンダリングすると、期待どおりの結果が得られます。これは、三角形を描画して得られる結果と同じです。

ただし、Apple のガイドラインに従ってこれらのストリップを連結すると (最初のストリップの最後の頂点と 2 番目のストリップの最初の頂点を複製することにより)、ストリップ 1 が正しく、ストリップ 2 が反転して (つまり、表示される側が反転して) ストリップが描画されます。

  14______15______23______41                     7 ______18______0
  / \    /  \    /  \    /  \                   /  \    /  \    /
 /   \  /    \  /    \  /    \                 /    \  /    \  /
0-----16------1 ------30------8----8----31----31------17------16

レンダラーに渡されるストリップ シーケンス: 0 14 16 15 1 23 30 41 8 8 31 31 7 17 18 16 0

最後に、2 番目のストリップを逆にして新しいシーケンス ストリップをレンダラーに渡すという簡単な実験では、違いはありません。2 番目のストリップはまだ反転されています。

私は何を逃したのですか?

4

1 に答える 1

1

欠けているのは「巻き順」です。巻き順によって、三角形がどちらを向いているかが決まります。時計回りの三角形は、反時計回りの三角形の反対方向を向いています。

三角形ストリップを処理するとき、opengl は偶数番号の三角形の巻き順を「反転」します。そうしないと、他のすべての三角形が間違った方向を向いてしまいます。

最初の三角形のセットに奇数の三角形が含まれているため、連結理論は実際には失敗しています。

あなたの場合、それは簡単に修正されます。頂点/三角形の数が偶数であるため、最初に 2 番目のセットから始めます。

一般的なケースでは、2 番目のセットを追加する前に、最初のストリップの最後に余分な三角形を追加して、三角形の数を偶数にする必要があると思います。

于 2013-06-04T03:35:31.047 に答える