0

ジオメトリをディスプレイリストに保存していますが、同じディスプレイリストに異なる「色合い」を付けて描画できるようにしたいと思います。たとえば、ディスプレイリストに黒と白の頭蓋骨がある場合、赤の色合いを設定して頭蓋骨を描画し、次に青の色合いを設定して頭蓋骨を描画します。

RGBA値を取得できれば、それらを変換する方法は正確にわかりますが、どこでインターセプトできるかわかりません。現在、ディスプレイリストにはテクスチャが含まれていませんが、将来的には含まれる可能性があるため、テクスチャの有無にかかわらず回答が機能する場合は便利です。

4

1 に答える 1

0

概念的には、ディスプレイリストは、実行時に実行される一連のコマンドにすぎませんglCallList。したがって、含まれているものはすべて、それらのコマンドを直接使用した場合と同じようになります(ただし、パフォーマンスが向上する可能性があります)。では、ディスプレイリストに多数のジオメトリコマンドが含まれている場合、どのようにそれらに色を付けることができますか?glColorはい、リストを呼び出す直前に通常のコマンドを使用して、あなたはそれを推測しました:

glColor(...);
glCallList(...);

オブジェクトにテクスチャを持たせ、それでもカラーリング可能にしたい場合は、set texture environmentを使用できますGL_MODULATE(シェーダーを使用していないと思います。そうしないと、とにかく質問全体がかなり時代遅れになります)。オブジェクトを点灯させたい場合は、もちろんに変更glColorしてくださいglMaterial

ただし、ディスプレイリスト内で色を設定した場合、それを取得して変更する機会はありません。とにかく、ディスプレイリストを使用することはお勧めしません。それらを使用してジオメトリを保存し、CPU-GPUコピーとドローコールのオーバーヘッドを削減する場合は、このために正確に作成されたVBOを使用ないでください(このような不確定な実装に悩まされることはありません)。

于 2012-03-13T09:25:02.697 に答える