0

私は最近OpenGLを学び始め、GLとシェーダーとのコミュニケーションに関しては、十分な能力を身に付けましたが、座標系については少しわかりません。

私はOpenGLES2.0を使用しているので、すべてのマトリックス管理を自分で行う必要があります。私は次のことを理解するようになりました:

  1. 正しい結果を観察するには、行列をモデル*ビュー*射影として乗算します(行列の乗算は可換ではないため、これは完全に理にかなっています)。

  2. モデル行列は、描画プリミティブの縮尺、回転、平行移動などを表します。3D空間でプリミティブを移動するには、この行列に変換を適用する必要があります。

  3. ビューマトリックスは、多くの人が参照している「カメラ」を表しています。オブジェクトとビューアの間の距離、およびオブジェクトの周りの目の回転は、このマトリックスへの変換から生じます。

  4. 最後に、遠近法マトリックスは、シーンが存在する3D空間を表します。視野とアスペクト比を使用した遠近法を主に使用するいくつかの例を以下に示します。これが私の混乱の始まりです。

プリミティブの座標は、区間+-[0、1]のfloatとして与えられます。しかし、遠近法行列は、near-zからfar-zまでの3D空間を表します(それぞれ0と100であることがわかりました)。プリミティブの座標がこの空間にどのようにマッピングされるかについて、私は混乱しています。明らかに、私の線形代数のスキルは、この場合に望んでいるほど強力ではありません。これらの点がこの空間にどのようにマッピングされているかを誰かが明確にできますか?

たとえば、多くの例では、立方体を+-(。5、.5、.5)に定義しています。IIは、near-z = 0、far-z = 100、およびディスプレイ全体のアスペクト比のパースペクティブマートリックスを使用します。これは、立方体がこれらの各次元の0.5に常にあることを意味しますか?つまり、遠近法の行列がx=-5からx=5になるように機能する場合、x座標は最終的に.5(-5)= -2.5になりますか?

4

1 に答える 1

1

頂点がどのようにマッピングされるかを理解するには、z = -1 から z = 1 になる「正規化されたデバイス座標」空間と呼ばれる最終的な形式で頂点を取得するために open gl が行うことを理解する必要があります。

まず、ビュー空間の頂点に射影行列が乗算されます。次に、頂点はその 4 番目または「w」コンポーネントで分割されます。これをパースペクティブディバイドと呼びます

この情報を知っていれば、式を導き出すことができます。 このページでは、ビューの z 座標を射影の z 座標にマッピングするために射影行列に入る計算について説明します。派生を気にしない場合は、下にスクロールして最終結果を確認できます。これは次のとおりです。

zn = (-(f+n) * ze / (f-n) - 2*f*n/(f-n) ) / (-ze)

ここで、zn は正規化されたデバイス座標の z、ze はビュー (または目) 座標の z、f はファー クリップ プレーン、n はニア クリップ プレーンです。

式を調べると、頂点の z コンポーネントが n に等しい場合、-1 にマップされることがわかります。f に等しい場合は 1 にマップされ、その間に双曲線関数に従って -1 から 1 になります。

于 2013-02-21T22:18:37.957 に答える