2011-06-19 17 views
0

OpenGLで3D-houseを構築しています。 GLObjViewerを使用してモデルとテクスチャをロードすることにしました。それはうまく動作します。 しかし、GLObjViewerのシェーディングモジュールは、「OpenGLのデフォルトの負のz軸を照らす単一の固定方向光源」をサポートしています。 ライトを固定すると壁が暗くなり、カメラでライトを動かすと壁の影が連続的に変化します。GLObjViewer(OpenGL)の複数のライト

私が今したいのは、カメラを動かした後、すべての壁を明るく照らし、陰影を変えないことです。それを買う方法を教えてください。 (GLObjViewerまたは他のソリューションで複数のライトを使用する方法)。 http://www.dhpoware.com/demos/glObjViewer.html

答えて

1

のOpenGL-2光の位置はモデルビュー行列によって変換されます。

あなたはGLObjViewerのドキュメントと、ここでソースコードを見つけることができます。つまり、カメラを配置した後でオブジェクトのローカル変換を適用する前にライトの位置を設定する必要があります。

バージョン3より前のOpenGLは、少なくとも8つのライト(GL_LIGHT0 ... GL_LIGHT7)をサポートしています。これは、独立して有効化および設定できます。その後、OpenGLバージョンは完全にシェーダ駆動されます。ライトは適切なシェーダを介して実装され、ライトパラメータはユニフォームに渡されます。

OpenGL-3互換およびそれ以前のバージョンには、このアプリケーションで使用されているgl_LightPosition[]のような定義済みのユニフォームがあります。これらの事前定義されたユニフォームは、適切なOpenGLステートセッターを使用して設定します。あなたの場合はglLight…です。

OpenGL-3.1コア以降では、定義済みのライト制服をすべて放棄し、プログラマに負担をかけて実装します。

glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); 

これは(-z軸に向かって平行な方向)システムの代わりに、静的に座標目の原点から鏡面反射を計算します:

0

はまた、いくつかの幸運やっている場合があります。

関連する問題