5

で、テクスチャ付き立方体の隣に頂点色付きの立方体を同時に描画していglDrawArrays()ましたが、照明を有効にすると、テクスチャ付き立方体が「わずかに明るく」なることがわかりました。

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)、立方体は少し明るい黄色で描画され、「最初の暗い黄色の立方体の色」に戻すことができません。

これが予想される動作かどうか教えてください。

4

1 に答える 1

1

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

キューブを再び少し暗くするために必要なことは、glMaterialfv() を使用して、デフォルトのカラー マテリアル プロパティ (おそらく拡散色と周囲色) を復元することだけです。デフォルトのマテリアル カラーは、こちらで確認できます。

于 2012-01-23T15:34:14.247 に答える