2

私はこの質問を念頭に置いています:私は本物の空のように見えるシーンを作る必要があります。私の最初のアイデアは、立方体を作り、それをテクスチャ化することでした。見栄えは良くありませんでした。球を使うというアイデアを思いつきました。しかし、私はそれを内側から照らすことができませんでした。カメラを原点監視(0,0、-100)に置きました。原点にもアンビエントおよびスペキュラー光源。何も点灯していません!空を作る方法と、球の内部を照らす方法を教えてください。

4

5 に答える 5

3

球の内側にいるので、カリングモードを変更してみてください。

私はXNAの人ですが、これはOpenGLと同等のようです。あなたが言ったようにアンビエントライトをつけていれば、法線に関係なく何かを見ることができるはずだと私は信じています。

于 2010-08-11T12:06:03.233 に答える
2

球の法線を反転してみてください(その他の検索結果はこちら)。一般に、レンダリングエンジンはアルゴリズムを使用して、表示されない可能性があるためレンダリングすべきでないものを判別します。そのような手法の1つに、裏面カリングがあります。 球は、法線が中心から離れて球から突き出る典型的な方法で作成されていると思います。法線が反対方向を向いている必要があります。

于 2010-08-11T12:08:30.177 に答える
1

外側からは照らされているが、内側からは暗い場合は、球の法線が間違った方向を向いている可能性があります。

フォン/グーロー照明を行っていると仮定すると、法線方向とビュー方向の間の正弦がどこかで計算されます。コサインは負になり、グラフィックカードはゼロにクランプされて黒色になります。

したがって、法線が明示的に指定されている場合は、方向を反転して->-1を掛けてみてください。頂点と面だけがある場合は、面の頂点の順序を変更することをお勧めします。2つのインデックスを切り替えるだけです。(1-2-3)->(1-3-2)。これにより、順序が時計回りから反時計回り(または逆)に変わります。結果をテストするために、裏面カリングのオンとオフを切り替えて、何が起こるかを確認できます。

于 2010-08-11T12:12:06.767 に答える
0

スカイドーム、スカイボックス、スカイプレーンを作るときは、実際には点灯しません。テクスチャを配置してレンダリングするだけです。

glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
Render sky dome
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);

ただし、これに伴う問題は、状態の変更にコストがかかる可能性があることです。したがって、GL_CULL_FACEの状態変化を排除する1つの方法は、法線が正しい方向を向いていることを確認することです。CULL_FACEがCCW(Counter ClockWise)に設定されている場合、法線はあなたの方を向いているはずです。ただし、CULL_FACEがCW(ClockWise)に設定されている場合、法線はあなたから離れる方向を向いている必要があります。GL_LIGHTINGの状態変化を排除するために私が見ることができる唯一の方法は、シェーダーを使用して独自の照明スキームを定義することです。しかし、それが多かれ少なかれ高価かどうかはわかりません。

スカイボックスの問題も同様の話ですが、他にも問題があります。視点が中心にない場合、歪みの問題が発生する可能性があります。私が一般的に行うことは、最初にスカイボックスをカメラの中央にレンダリングしてから、デプスバッファをクリアして他のすべてをレンダリングすることです。そうすれば、スカイボックスを途方もなく大きくする必要はありません。

于 2010-08-12T17:57:44.377 に答える
0

問題が解決しました。感謝しますが、法線は答えではありません。私はglutSolidSphereを使用しているので、法線は間違っていません。glLightModeli(GL_LIGHT_MODEL_TWO_SIDE、GL_TRUE);を使用してみてください それはあなたのために仕事をするはずです。

于 2010-08-11T13:17:53.697 に答える