テクスチャのない三角形のメッシュがありますが、色 (青のようなもの) とアルファ (0.7f) が設定されています。このメッシュは実行時に生成され、法線は正しいです。照明をオンにすると、オブジェクトがレベル内を移動するにつれてオブジェクトの色が変化することがわかりました。また、照明が正しく見えません。このオブジェクトを描画するときのコードは次のとおりです。
glEnable( GL_COLOR_MATERIAL );
float matColor[] = { cur->GetRed(), cur->GetGreen(), cur->GetBlue(), cur->GetAlpha() };
float white[] = { 0.3f, 0.3f, 0.3f, 1.0f };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matColor);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
私が気付いたもう1つの奇妙なことは、無効にしてまたはのみを使用すると、照明が失敗することGL_FRONT_AND_BACK
です。これが私の照明設定です(レンダラーの開始時に一度行われます):GL_FRONT
GL_BACK
m_lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
m_lightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
m_lightPosition[] = { 0.0f, 1200.0f, 0.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, m_lightAmbient);
glLightfv(GL_LIGHT0, GL_SPECULAR, m_lightSpecular);
glLightfv(GL_LIGHT0, GL_POSITION, m_lightPosition);
編集:法線を「より」正確にするために多くのことを行いました(自分でサーフェスを生成しているため)が、オブジェクトの色は場所によって異なります。どうしてこれなの?openGL には、私が知らない特別な環境ブレンディングがありますか?
編集: 色の変化は、前のテクスチャがテクスチャ スタックにあり、描画されていなくてもglMaterialfv
ブレンドされていたためであることがわかりました。