4

これは非常にばかげた初心者の質問だと思いますが、私はグラフィックスとopenGLの初心者です。球体を描画し、近くに光源を配置し、環境光も指定したので、光とマテリアルの値を試してみたところ、驚くべき結論に達しました。指定した色はglColor*、照明が有効になっている場合はまったく問題になりません。代わりに、同等のものはマテリアルのアンビエント コンポーネントです。この結論は正しいですか?ありがとう

4

2 に答える 2

5

照明が有効な場合、頂点の色の代わりに、マテリアルの色 (つまり、色 - 光に対するさまざまなタイプの反応のためにいくつかの色があります)が使用されます。マテリアルの色はglMaterial*関数によって指定されます。

コードを再利用したい場合は、 と を使用glEnable(GL_COLOR_MATERIAL)glColorMaterial(GL_AMBIENT_AND_DIFFUSE)て、古いglColor*呼び出しをマテリアルの色に自動的にマップすることができます。

(そして、できるだけ早くシェーダーに切り替えてください。シェーダーのアプローチはより簡単で強力です)

于 2010-11-13T13:35:41.367 に答える
3

フラグメントシェーダーはまだ使っていないと思います。glprogramming.comから:

vertex color =
    the material emission at that vertex + 
    the global ambient light scaled by the materials ambient
    property at that vertex + 
    the ambient, diffuse, and specular contributions from all the
    light sources, properly attenuated

はい、頂点カラーは使用されません。

編集:GL仕様でGL雷方程式を探すこともできます(近くにありますよね^^)

于 2010-11-13T13:30:20.073 に答える