0

ほとんどの照明は思い通りに機能していますが、周囲の照明が完全に欠けているようです。つまり、物事の太陽から離れた側は完全に黒くなります (50% の周囲光を期待していました) が、太陽に向かう側は期待どおりに明るく見えます。

これが私の照明設定コードです(オリジナルから編集、以下の注を参照):

- (void) setupLighting
{
    const float amb = 2.0;
    const float LightAmbient[][4]  = {  { amb, amb, amb, 1.0f },
                                        { amb, amb, amb, 1.0f }
                                    };
    const float LightDiffuse[] [4] = {  { 1.0f, 1.0f, 1.0f, 1.0f },
                                        { 1.0f, 1.0f, 1.0f, 1.0f }
                                    };
    const float LightPosition[][4] = {  { 1.0f,  4.0f, 2.0f, 0.0f },
                                        { 0.0f, 10.0f, 0.0f, 1.0f }
                                    };

    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient[0]);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse[0]);
    glLightfv(GL_LIGHT0, GL_POSITION, LightPosition[0]);

    glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient[1]);
    // etc., snip -- no LIGHT1 for this round

    glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glEnable(GL_COLOR);
    //glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHT0);
    //glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);
}

(注: LIGHT1 は今のところコメントアウトされています。私は LIGHT0 に自分のやりたいことをさせようとしているだけです。)

問題があるかどうかはわかりませんが、glDrawArrays() を使用して、ユニットに合わせてテクスチャ マッピングされたユニット キューブ (MineCraft 風) を描いています。私の法線はすべて正しいようです。照明をオフのままにすると、すべてが正しく描画されます (フラット ライトのみ)。

ヒントはありますか?

ありがとう!

編集(スクリーンショットを追加)

これが問題のスクリーンショットです

編集 コメントごとに、アンビエント値を 2.0 まで上げましたが、今では約 50% のアンビエントに期待するもののように見えます。それは奇妙に思えます-照明の値が[0、1]に固定されていると思いました...?アンビエントライトについて理解していない基本的な概念は何ですか?

4

1 に答える 1

2

あなたのコードでは、有効にしませんでしたGL_COLOR_MATERIALglMaterialしたがって、アンビエント マテリアル カラーを ( で呼び出して)設定しなかった場合GL_AMBIENT、デフォルトは (0.2, 0.2, 0.2) であり、(1,1,1) (ライトのアンビエント) を掛けるとスクリーンショットになります。

また、いずれにしても [0,1] にクランプされるため、1 より大きい色の値を使用する必要はありません。

于 2011-06-04T22:26:43.290 に答える