2012-01-22 27 views
4

テクスチャキューブの隣にある頂点カラーキューブをglDrawArrays()と同時に描画していて、ライティングを有効にするとテクスチャキューブが「やや明るく」なることがわかりました。 が呼び出された直後に、すぐにglDisable(GL_COLOR_MATERIAL)が呼び出されても、テクスチャキューブに「やや明るい」効果が発生することがわかりました。ここでOpenGL glEnable(GL_COLOR_MATERIAL)に続いてglDisable(GL_COLOR_MATERIAL)

が短い説明です:

glEnable(GL_COLOR_MATERIAL); 
glDisable(GL_COLOR_MATERIAL); 
(...) 
glDrawArrays(GL_QUADS, 0, n); 

glEnable(GL_COLOR_MATERIAL)がまったく呼び出されない場合、キューブが黄色で描かれています。 glEnable(GL_COLOR_MATERIAL)が呼び出された場合、その後にもglDisable(GL_COLOR_MATERIAL)が付いていても、キューブはやや明るい黄色で描画され、「最初の濃い黄色のキューブの色」に戻ることはできません。

これが予期した動作であるかどうか教えてください。

+1

確かにバグのようです。どのようなOSとどのタイプのGPU(NVidia、ATI)ですか? – user1118321

+0

WinXPのSP3 Home Editionの ATIのRadeon HD4850 OpenGLのバージョン\t 6.14.10.11251 で初期状態私はそれはバグだと思ったが、その後PFD_GENERIC_FORMATでテストされ、同じ結果を得ました。 glEnable(GL_COLOR_MATERIAL)の後、OpenGLの状態のカラーマテリアルが「いくらか」の色でオンザフライで更新されているようです。 – luiez

答えて

1

これはまさに予想される動作ではありませんが、修正するのは簡単なはずです。 GL_COLOR_MATERIALを使用すると、頂点カラーでマテリアルプロパティを上書きできます。バグは、色が頂点の色の指定だけでなく、色の材料の有効化にも書き換えられるということです(私の推測では、バグを防ぐために意図的に行われている可能性があります)。

もう少し暗くするために必要なのは、glMaterialfv()を使用して、デフォルトのカラーマテリアルプロパティ(拡散したアンビエントカラー)を復元することだけです。 default material colors hereが見つかります。

関連する問題