5

OpenGLで2Dゲームを作っています。VBO を使用してテクスチャの描画を高速化したいと考えています。

現在、私は即時モードを使用しています。テクスチャを回転およびスケーリングするときに、独自の座標を生成しています。ポリゴン プリミティブを使用してテクスチャの角を丸くする機能もあります。

オフセットを含まないテクスチャの側面の頂点を持つ VBO を作成するのが最も速いので、glTranslate、glScale、glRotate を使用してテクスチャの描画位置を移動できると考えていました。次に、同じ VBO を変更せずに使用して、毎回テクスチャを描画できます。丸みを帯びた角の座標を追加する必要がある場合にのみ、VBO を変更できました。

それはこれを行うための最良の方法ですか?その際、どのような点に注意すればよいですか?最新のグラフィックス カードで GL_QUADS の代わりに GL_TRIANGLES を使用するのが本当に最速ですか?

回答ありがとうございます。

4

2 に答える 2

4

パフォーマンスを向上させるには、即時モード レンダリングを使用するのではなく、代わりに (CPU または GPU で) 頂点バッファーを使用し、glDrawArrays などのメソッドを使用して描画します。テクスチャ マトリックス乗数を変更してテクスチャ座標をスケーリング/回転することは、パフォーマンスの問題ではありません。メッシュ全体にいくつかの小さな値を設定するだけです。ここで最も重要なボトルネックは、頂点ごとのデータ (色、位置、テクスチャ座標など) を GPU に転送することであり、GPU 上の頂点バッファー オブジェクトが非常に役立ちます。

画面に描画するメッシュが静的である場合、つまり、一度設定して後で (一部を) 変更する必要がない場合は、すべてのコーナーを含むメッシュ全体のテクスチャ座標を 1 回だけ生成できます。 . 後でテクスチャ マトリックス マルチプライヤを使用して、メッシュ全体のテクスチャ座標を変更できます。ただし、異なる変換を使用してメッシュの異なる部分を変更する場合は、メッシュを部分に分割する必要があります。あなたが説明したことから、単一の静的メッシュ (頂点ごとのデータのリスト) を使用して実現できる、内部に画像を保持する角の丸い四角形を描画したいことを理解しています。

最後に、GL_QUADS も最新の OpenGL 仕様では非推奨です。とにかく多くの機能を提供しないため、QUADS を三角形または三角形のストリップ/ファンに切り替える必要があります。

于 2010-06-01T08:21:05.223 に答える
1

VBO を使用してテクスチャ ポリゴンを描画する場合は、頂点だけでなく、テクスチャ座標 (頂点ごとに 1 つの UV 座標) と、頂点ライティングを行う場合は頂点カラー (glColor を使用) のバッファも作成する必要があります。そうでない場合は代わりに)。目的のテクスチャをバインドする前に glClientActiveTexture(GL_TEXTUREn) を使用します。render 呼び出しを発行する前に、使用している各バッファ タイプに対して glEnableClientState() を使用することを忘れないでください。

于 2010-08-04T23:51:20.327 に答える