1

私はたくさんのオブジェクトを持っていますが、これらのオブジェクトの 1 つ (マウスがホバリングしているオブジェクト) を「光らせる」(急速に色を変える) 必要があります。

これを行う 1 つの方法は、各オブジェクトに独自の VBO を持たせることです。色の配列はありません。次に、それぞれ約 20 個のクワッドを持つ 1000 個の VBO を作成します...それが選択されたオブジェクトである場合は、その前に glColor3f(blah,blah,blah) を呼び出します。それ以外の場合は、デフォルトの色になります。

もう 1 つの方法は、それらすべてを 1 つの大きな VBO にまとめることです。色の配列があります。次に、glBufferSubDataARB をカラー配列に非常に頻繁に挿入して、1 つのオブジェクトを光らせます。

どちらの方法が優れていて、その理由は? 両方の方法が悪い場合は、別の方法も提案してください。

4

3 に答える 3

6

あなたは何かを知っている?色の配列を忘れてください。頂点ごとに異なる色を持っているのではなく、オブジェクトのグループ全体に対して異なる色を持っているため、カラー配列は意味がありません。

カラーデータなしで、すべての頂点データを単一の VBO に入れます。

glColor3f次に、色 (またはオブジェクト グループ) をループし、とを呼び出す色ごとglDrawArraysに、firstとのcountパラメーターは、その色のオブジェクトに属する頂点の数と一致します。

固定機能のパイプラインからシェーダーに移行するときはglColor3fglUniform3f.

于 2012-02-03T20:29:11.030 に答える
0

間違いなく 1 つ大きい VBO です。理由は簡単です。多くの VBO がある場合は、各描画呼び出しが発行される前に、それぞれのバッファーをバインドする必要があります。

編集:また、複数の VBO を使用したい理由を読むと、不思議に思います。カラー変数をシェーダーで一様変数として渡さないのはなぜですか?

于 2012-02-03T19:45:54.553 に答える
0

色違いは何色?一度にすべてを VBO に入れglColorPointer、選択したオブジェクトの VBO の別の部分をフレームごとに選択するために使用できますか? オフセットを VBO に変更することは、別のバッファーをバインドしたり、新しいデータをバッファーにアップロードしたりするよりも効率的です。

基本的に、選択されていない通常のオブジェクトの束を描画し、呼び出しglColorPointerてハイライト色を選択し、選択したオブジェクトを描画し、呼び出しglColorPointerて VBO オフセットを元に戻し、残りのオブジェクトを描画することをお勧めします。

すべての頂点とカラー データが 1 つの VBO にあるからといって、すべてのオブジェクトを 1 回の呼び出しでレンダリングする必要があるわけではありません。

于 2012-02-03T19:47:53.810 に答える