1

OpenGLで非常に厄介な問題があります。

私の宿題は、人間と剣と他のいくつかのオブジェクトでシーンを作成し、ポイントライトを男の「手のひら」(右が緑、左が赤)にし、指向性光源を太陽にすることです。 。

これが私のプログラムの2つのバージョンを含むzipです:http://www.woofiles.com/dl-245221-OdPUtOaW-Release.zip

(残念ながら、名前はハンガリー語です。「szép_de_rossz_oldalon_a_fény」は「素敵ですがライトは反対側にあります」を意味し、「fény_jó_oldalon_de_ronda」は「右側にあるが醜いライト」を意味します。)

私の問題は、ライトの効果がテッセレートされたパラメトリックサーフェスの反対側に現れることです。

論理的な説明は、サーフェス法線が正しくないということですが、それらに-1を掛けると、さらに奇妙な結果が得られます。通常のベクトル補間は壊れているように見え、残っているのは照明の悪い粗い表面です。法線を逆にすることによってすべて。三角形が正しい方向を向いていること、ベクトル演算が完璧であること、そしてすべてが本来あるべきシーンに配置されていることを確信しています(剣は緑色であることがわかりますが、他の表面のその側は赤)。

4

2 に答える 2

3

私には悪い法線のように聞こえます-符号エラー以外にも法線ベクトルを台無しにする方法がたくさんあることを覚えておいてください:

  • 法線に単位長がない可能性があります (glEnable(GL_NORMALIZE)違いが生じるかどうかを試してみることで確認できます)。
  • それらは実際には表面に対して垂直ではない可能性があります(三角形のエッジの外積を法線ベクトルと比較して確認してください)
  • 三角形の頂点のラッピング (CW/CCW) に一貫性がなく、法線の符号が効果的に反転している可能性があります (カリングが有効になっていない限り、一部の三角形がまったく表示されない可能性があります)。

幸運を!

于 2011-05-04T22:55:07.820 に答える
2

残念ながら、リンク先の zip にはコードがありませんでした...

ポリゴンの面が混同されたときに以前に使用しなければならなかったワンショットのことは、GL_LIGHT_MODEL_TWO_SIDE を glLightModel として使用することです。これにより、前面だけでなく、ポリゴンの両側が照らされます。メモリからの使用法は

glLightModel(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE)

(または何か)照明が行われる前に呼び出しを行います。

これはハッキーな解決策ですが、コードが表示されず、締め切りに間に合っていると思います..誰かがより良い解決策を見つけるまで、少なくとも試してみてください:)

于 2011-05-04T20:52:09.953 に答える