2008-09-16 15 views
5

私は何年もOpenGLを使用してきましたが、D3Dを初めて使用しようとした後、私はどのようにシーンライトは私のオブジェクトに固定されるのではなく、世界に固定されたままです。Direct3Dでライトを固定する方法

OpenGLのライトポジションは、MODELVIEWマトリックスで他のすべてのものと同様に変換されるため、ライトをスペースで固定するには、MODELVIEWをライト用に設定し、glLightPositionを呼び出してジオメトリ用に設定しますジオメトリ呼び出しを行います。 D3Dでは役に立ちません。

(コメント - 私は結局のところこの答えを見つけ出しましたが、ウェブやMSDNに役立つものは何も見つかりませんでした。もし見つけられたら、私は数時間頭を引っかきました。この答えは。)

答えて

1

私が結局見つけた答えは、OpenGLはその1つが合併されたMODELVIEWのマトリックスしか持っていないが、D3Dでは "世界"と "ビュー"の変換が別々に保たれ、このため。その答えは、D3DTS_VIEWをライトに適用するマトリックスを設定し、D3DTS_WORLDを使用して、世界中のジオメトリの配置に適用されるマトリックスを設定することです。

実際には、D3DシステムはOpenGLの方法よりも理にかなっています。それはあなたがいつでもどこでもあなたのライトポジションを指定することを可能にします。あなたの現在の「ビュー」変換によって変換されるように、それらの位置を絶えず変更する必要はありません。 OpenGLはあなたの "ビュー"があなたの "モデル"と何を考えるかを単に知ることができないので、そのように働かなければなりません。これはGLのモデルビューです。

(コメントは私自身の質問に答えてはいけない場合はお詫びしますが、これは数週間前の本当の質問で、OpenGLからOpenGLに移行するためにここに投稿する価値があると思いました。 D3D。D3Dのライティングとレンダリングのパイプラインの基本的な概要が出にくいようです。)

0

固定機能パイプラインの場合、ライトの位置と方向はワールド空間で設定されます。軽い構造のドキュメントはあなたにそれを伝えますが、私はあなたがドキュメントでそれを見逃したことに驚くことはありません。プログラマブルなシェーダに焦点を当てるので、固定機能のパイプラインに関する情報はそれほど多くありません。

関連する問題