2011-07-10 16 views
2

OpenGL ES 1.1を使用してサンプル3Dシーンをレンダリングしました。ここ は、私が身元の射影行列を持っているとき、私は何を得る(私も、通常の鏡面マップを使用しています)です:OpenGLのパースペクティブと照明の問題

enter image description here

だから、すべてがOKになります。

しかし、私はglFrustumを使用して視点を設定している場合、私はこの取得:

enter image description here

をだから、法線が反転しているようだと私は-1によってそれらを乗算しようとした場合、私はこの取得:

enter image description here

反対側からの光のような効果があります。

また、私は

glCullFace(GL_FRONT);

を設定する必要が同一の射影行列を使用する場合(私は正規化されたデバイスCOORDSが左利きしているためであると思う)ことを言及すべきです。

この問題の解決方法に関するご意見をお寄せいただきありがとうございます。

編集。ここ は、投影のセットアップです:あなたの第二のスクリーンショットは大丈夫に見える

float right = 0.03; 
float top = 0.045; 
float near = 0.1; 
float far = 100.0; 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustumf(-right, right, -top, top, near, far); 
+0

法線を正しい方向に再エクスポートしますか? –

+0

'glCullFace(GL_FRONT)'を変更する必要はありません。あなたの投影行列が顔を反転させているのでしょうか?あなたの 'glFrustum'呼び出しを見せてください。これはあなたが変わっていることなのですか? –

+0

@Banthar - アイデンティティの投影にはglCullFace(GL_FRONT)を、パースペクティブには使用しません。私の編集を参照してください。 – Max

答えて

0

問題がどこにあるか、私は表示されません。 2番目の画像を強調表示してください。

投影行列には、投影とカメラ配置の種類のみがあることに注意してください。 「カメラ配置」はmodelviewに属します。

+0

残念なことに、2番目の画面はそうではないように見えます。モデルにはスクワマがあり、それは法線マップの助けを借りてレンダリングされます。最初の画面 - それはどのように見えるかです。また、モデルが(最初のものとは違って)第2の画面上でスムーズに陰影をつけられていないことに気が付かなかった場合(アニメーションモデルではよりよく見える) – Max

+0

私はあなたの問題が問題だとは思わない。問題はフラグメントシェーダのどこかにあると思っています。私が推測しなければならないのは、おそらく接線空間→目の空間変換が乱れていることでしょう。 – datenwolf

+0

私はOpenGL 1.1を使用しているので、シェーダはありません。 – Max