1

三角形の単純な配列を描画しようとしています。それらはすべて接続されているので、現在 DrawArrays と GL_TRIANGLE_STRIP を使用しています。ただし、XCode プロファイラーを確認すると、代わりに DrawElements とインデックス付き配列を使用することが提案されています。

私は実際にこれを行う必要がありますか?DrawElements にも TRIANGLE_STRIP のオプションがあることに気付きましたが、glDrawArrays を使用すると頂点が繰り返されないため、利点がわかりません。

私が描いている三角形の図は次のとおりです。 ここに画像の説明を入力

ご覧のとおり、TRIANGLE_STRIP を使用しているため、繰り返しはありません。これをインデックス化する利点はありますか?

4

1 に答える 1

1

通常glDrawElementsは高速ですが、あなたの場合 (頂点が 2 行しかない場合) はパフォーマンスに影響せずglDrawElements、インデックス バッファーも処理する必要があるため、さらに遅くなる可能性があります。

頂点の行が 3 つ以上ある他の場合では、頂点の繰り返しが始まりglDrawElements、頂点バッファーを使用してインデックスを作成する必要があります。索引付けの利点は次のとおりです。

  • 3D モデルが小さくなり、メモリ消費量が少なくなるだけでなく、グラフィック カード メモリへのロードが高速になります。したがって、メモリが少ないということは、メモリ転送も少ないことを意味します。

  • シェーダーが複雑で操作が多すぎる場合、インデックス作成はパフォーマンスにプラスの影響を与える可能性があります。実際、頂点にインデックスを付けている場合、同じ頂点の結果を何度も再計算する必要はありません。結果は 1 回計算され、キャッシュされ、別のインデックスが同じ頂点を指しているときに再度使用されます。

  • 変形可能なオブジェクトがある場合 (つまり、物理的な衝突により頂点の位置が変化する場合)、インデックス作成が役立ちます。インデックスを作成していないと仮定すると、三角形ごとに同じ頂点 (位置) を繰り返すことになります。したがって、衝突をシミュレートするために頂点の位置を変更したい場合は、すべての三角形の頂点の位置を更新する必要があります。ただし、頂点バッファーにインデックスを付ける場合は、頂点の位置を変更し、インデックス バッファーを同じに保つだけで済みます。

于 2016-12-06T17:55:34.000 に答える