9

OpenGL のドキュメントによると、gluLookAt() 呼び出しは GL_MODELVIEW マトリックスで行う必要があります。

http://www.opengl.org/resources/faq/technical/viewing.htm

実際、ドキュメントは、GL_PROJECTION マトリックスで gluLookAt() を使用することは非常に悪いと言う記事へのリンクです。

GL_PROJECTION の不正使用の根絶にご協力ください

一方、GL_PROJECTION マトリックスで gluLookAt() が実際に呼び出されるチュートリアルや例がたくさんあります。同時に、上記の記事では GL_PROJECTION マトリックスで使用しないようにと書かれていますが、そのような使用法のほとんどでは、使用しても目に見える問題はないと述べています。

私の質問は次のとおりです。実際のプロジェクトで gluLookAt() を使用する最良の方法は何ですか? GL_PROJECTION マトリックスでそれを使用することは、本当にそれほど多くないのでしょうか?

4

3 に答える 3

9

gluLookAt() 関数は、シーン内のオブジェクトの回転を変換する変換行列を提供します。したがって、これは明らかにモデル変換であり、GL_MODELVIEW マトリックスに入る必要があります。

理由については、頂点シェーダーで自分で行うとより明確になります。

頂点の位置は確かにちょうどv.pos * modelview * projectionですが、他の計算 (ライティングやフォグなど) のための投影コンポーネントなしでモデル ビュー マトリックスが必要です。これが、固定関数パイプラインがこれら 2 つのマトリックスを分離する理由です。

したがって、API で指定されているパラダイムに固執する必要があり、特に無数の不適切な opengl の「チュートリアル」を決して信頼しないでください。

于 2012-03-02T21:07:06.357 に答える
3

質問を理解しているかどうかわかりません。「ほとんどの場合」しか機能しないことをページがしないように指示する理由を尋ねていますか?

理解するのはそれほど難しいことではありません。「そのような使用法のほとんど」とは、定義上、そのような使用法で問題が発生するものがあることを意味します。

したがって、あるときはうまくいき、別のときはうまくいかないことを実行するか、または常にうまくいくことを実行することができます。

これは難しい選択ではありません。さらに、正しい方法で行うということは、文字通り 1 行のコードを数行下に移動することを意味するからです。

于 2012-03-02T20:26:15.440 に答える
2

私の質問は次のとおりです。実際のプロジェクトで gluLookAt() を使用する最良の方法は何ですか? GL_PROJECTION マトリックスでそれを使用することは、本当にそれほど多くないのでしょうか?

常にモデル ビュー マトリックスを使用して視点を配置します。これは、マトリックスの名前モデル(つまり、ジオメトリの配置) とビュー(視点の配置) にも含まれています。

射影行列は、OpenGL の「カメラ」のレンズのようなものです。ビューを設定するためにカメラ本体を所定の位置に保持して、カメラのレンズを移動しませんよね? レンズの移動には、チルト/シフト効果の実装などの用途があります。

于 2012-03-02T21:06:32.080 に答える