2011-07-13 6 views

答えて

3

VBOの特定の範囲をglMapBufferRangeを使用してユーザーメモリにマップできます。もちろん、頂点、色、およびテクスチャのデータがインターリーブされている場合は、glMapBufferに相当します。

EDIT:

あなたのVBOがある場合:

[XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy] 

あなたはバッファ([TxTy TxTy TxTy TxTy])の最後の部分をマッピングすることによってのみ、テクスチャ座標をアップロードし、それを更新することができます。また、glBufferSubDataを使用することもできます。バッファ全体を更新するほうが速いでしょう。

しかし、あなたは、インターリーブされたデータを使用する場合:

[XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy] 

を次に、バッファの一部を更新することはできません。

+0

答えはタイプXの要素だけを送信することができます。例えば、texcoordsだけですか?これは複数のバッファを使うほど速くなるでしょうか、それとも速くなりますか? – Rookie

+0

「XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy」の形式でデータを使用するにはどうすればよいですか?またはちょうど私がgoogleと呼ばれるメソッドであることを教えてください:) – Rookie

2

VBOをメモリ空間にマップし、データをまたいで変更して変更することで、テクスチャコードを更新することができます。

1つの欠点は、いったん変更されたVBO全体がレンダリングのためにビデオメモリに再送信する必要があることです。これを頻繁に変更する場合は、バスの帯域幅が問題になります。

テクスチャコードに何らかのアルゴリズム修正を加えようとしているなら、おそらくシェーダでこの計算を行うことができます。もう1つのオプションは、CPU側で新しい値の配列を作成し、これらの値をシェーダに送信し、レンダリング時に置換を行うことです。このオプションを使用すると、最初の場所で元のVBOからtexcoordを除外することもできます。

+0

私はアニメーション、ポジションの変更、および照明を作るつもりです、私はこれも駄目なハードウェアで動作するようにしたいのでシェイダーを使用することはできません。 – Rookie

関連する問題