2016-11-25 7 views
0

私はOpenGLと行列操作で遊んでいましたが、P * V * Mという概念を理解していますが、なぜ「カメラ」のZ位置を変更してもズームの効果がないのは理解できません。OpenGL Orthographical Projection

パースペクティブプロジェクションを使用する場合、カメラのZを変更するとズームの効果があります(予想通りです)。

glm::mat4 Projection = glm::perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f); 
glm::mat4 View  = glm::lookAt(
          glm::vec3(0,0,3), // changing 3 to 8 will zoom out 
          glm::vec3(0,0,0), 
          glm::vec3(0,1,0) 
         ); 
glm::mat4 Model  = glm::mat4(1.0f); 
gml::mat4 MVP  = Projection * View * Model; 

しかし、私がオルトプロジェクションを使用している場合、3から8などを変更するとズームアウトの効果はありません。私はそれらが非常に異なる予測であることを知っていますが、私は説明を探しています(それがうまくいかない理由の裏にある数学は特に役に立ちます)。

glm::mat4 Projection = glm::ortho(
    0.0f, 
    128.0f, 
    0.0f, 
    72.0f, 
    0.0f, 
    100.0f 
); 

答えて

1

これは、正射影投影がどのように機能するかを示しています。透視変換を開始してみましょう:

あなたがカメラに直線に従うことによって、オブジェクトの投影を取得:

enter image description here

あなたが近くにカメラを移動する場合は、あなたが予想いることがわかります面積増加は:

enter image description here

正射投影は異なる動作します。あなたは、像面に垂直な直線を、以下で投影を得る:

enter image description here

そして明らかに、投影面積の大きさは、カメラが離れてオブジェクトからどのくらい離れているかに依存しません。これは、投影線が常に平行になり、イメージ・プレーンの2つの方向でオブジェクトのサイズを保持するためです。ここで

perspective camera

: - ポイント目の座標系(XE、あなたがた、ZE)あなたは透視カメラを移動すると、何が起こるかで

+0

だから正投影をズームする方法は、単に 'GLM :: ortho'に渡された番号を変更しているのですか? – TomShar

2

Z座標を3から8に変更すると、実際にズームアウトしていないため、カメラを遠くに移動しているだけです。 glm::perspectiveの最初のパラメータを変更して、カメラを動かさずにズームアウトすることができます。

正射影カメラには位置がありません(遠方にあると考えることができる)ので、正射影カメラを同じ方法で「移動」することはできません。渡された境界をglm::orthoに変更すると、ズームアウトできます。大きな数字をglm::orthoに渡すだけです。

1

ルック。 (XP、YP、ZP) - その点の投影 のn - 近い面までの距離 トン - 錐

の上面までの距離あなたがカメラに近づくと、XPおよびYPが成長すると、見ることができます。

逆に、直交カメラのz位置を変更してもxpとypには影響しませんが、zpに影響します。したがって、深度バッファの値が変更されます。

orthogonal camera

+0

正射投影法をズームする方法は、glm :: orthoに渡される数値を変更するだけです。 – TomShar

関連する問題