21

インデックス配列を使用してglDraw*Elements *でテクスチャポリゴンをレンダリングするときはいつでも、頂点の配列とテクスチャ座標の配列を提供できます。次に、インデックス配列の各インデックスは、頂点配列のある位置にある頂点と、テクスチャ配列の同じ位置にある対応するテクスチャ座標を参照します。たとえば、複数の個別のプリミティブ(QUADSなど)が1つの頂点を共有しているが、その頂点に異なるテクスチャ座標が必要な場合、異なるテクスチャ座標があるのと同じ回数だけ、その頂点を配列に複製する必要があります。したがって、テクスチャ座標配列をインデックス配列内の位置に関連付けることができれば、はるかに便利です。そうすれば、1つの特定の頂点を異なるテクスチャ座標に関連付けるために頂点の複製は必要ありません。

これは可能ですか?はいの場合、どの構文を使用しますか?

4

3 に答える 3

11

いいえ。簡単な方法ではありません。

バッファテクスチャとシェーダロジックを使用して実装できます。しかし、属性に希望どおりのインデックスを付けるための単純なAPIはありません。すべての属性は同じインデックスからサンプリングされます(インスタンス化された配列除数が使用されている場合を除きますが、それも役に立ちません)。

これを行うと、メモリとパフォーマンスのトレードオフになることに注意してください。バッファテクスチャを使用して頂点データにアクセスすると、消費するメモリは少なくなりますが、通常の属性を使用するよりも大幅に遅くなり、制限が厳しくなります。正規化された頂点属性にアクセスできないため、頂点データを圧縮するには、明示的なシェーダーロジックが必要になります。また、バッファテクスチャへのアクセスは全体的に遅くなります。

これは、メモリが貴重な場合にのみ行う必要があります。

于 2011-10-17T19:07:40.050 に答える
6

たとえば、複数の個別のプリミティブ(QUADSなど)が1つの頂点を共有しているが、その頂点に異なるテクスチャ座標が必要な場合、異なるテクスチャ座標があるのと同じ回数だけ、その頂点を配列に複製する必要があります。

頂点位置を共有するプリミティブでテクスチャ座標が異なる場合、頂点全体は共有されません。頂点は、で構成される単一のベクトルです。

  • ポジション
  • 正常
  • テクスチャ座標
  • その他の属性

これらのいずれかを変更すると、頂点が異なります。そのため、頂点の共有はあなたが思っていた方法ではありません。

于 2011-10-17T19:40:43.763 に答える
0

1つが1つのテクスチャ座標を持ち、もう1つがもう1つを持つように、頂点を複製できます。その唯一の欠点は、サーフェスをモーフィングする必要がある場合です。1つの頂点を移動できますが、両方を移動することはできません。もちろん、それを「強制的に」行うことは可能です。つまり、ループを実行して、移動しながら異なるテクスチャ座標を使用する場合ですが、VBOではなく、はるかに遅くなります。

于 2016-01-15T20:17:28.630 に答える