3

だから私は次の光で描いている3Dオブジェクトを持っています:

    GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 0.9};  /* White light. */
GLfloat light_position[] = {300.0, 300.0, 300.0, 0.0};  
glShadeModel(GL_SMOOTH);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);

オブジェクトを「通常の」コンテキスト (つまり、glOrtho なし) で描画すると、期待どおりにオブジェクトが照らされます。

ただし、私はオブジェクトの正射影に取り組んでおり、その目的のために(ModelViewマトリックスで)glOrthoを使用しています。glOrtho 呼び出しの後にライトを初期化し、動作した場合 (3D の場合) とまったく同じ方法でオブジェクトを描画します。しかし、何らかの理由で、照明が直交投影で機能しません。つまり、glOrtho 呼び出しを行った後です。

これは 3D の場合に機能するため、法線の問題ではありません。glOrtho 呼び出しを使用すると、すべてが薄いレイヤーに押し付けられて、ライトが期待どおりに動作しない理由が説明されると思いますが、正直なところ、照明の経験がないため、これは間違っている可能性があります。

誰が何が起こっているのか知っていますか?

4

1 に答える 1

1

照明は目の空間で発生します。つまり、投影がまったく適用される前です。変換行列を間違った方法で使用している可能性があります。glOrtho、glFrustung、または gluPerspective は GL_PROJECTION マトリックスに入り、gluLookAt およびその他のカメラ配置のものは GL_MODELVIEW に入ります。

于 2011-06-17T14:10:43.403 に答える