通常、世界の位置を画面にマップする変換がいくつかあります。最も一般的なものは次のとおりです。
- ワールド変換: オブジェクトを他のオブジェクトに対して相対的に再配置するために、オブジェクトに適用できます。
- ビュー変換: この変換の後、カメラは O にあり、z 方向を見ます。
- 投影変換: 実際のカメラをシミュレートするための透視変換などを実行します。
- ビューポートの適応: これは基本的に、位置を [-1, 1] の範囲からビューポートにマッピングするスケーリングと変換です。これは通常、画面の幅と高さです。
gluLookAt
ビュー変換を作成するために使用されます。次のように想像できます: カメラをシーンのどこかに配置します。次に、カメラが原点にあり、z 方向を向き、y 軸が上方向を表すように、シーン全体を (カメラで) 変換します。これは単純な剛体変換であり、任意の回転 (3 つの自由度) と任意の平行移動 (さらに 3 つの自由度) として表すことができます。すべての剛体変換は、個別の回転と平行移動に分割できます。正しい値を選択すると、評価の順序も変わる可能性があります。変換はさまざまな方法で解釈できます。ブログ記事を書きましたちょっと前の話題で。興味のある方はぜひご覧ください。これは DirectX の場合ですが、数学は OpenGL の場合とほとんど同じです。転置された行列に注意する必要があります。
2 番目の質問: はい、そのとおりです。逆変換を見つける必要があります。これは、逆行列を使用して簡単に実現できます。ビュー行列 V を次のように指定した場合:
V = R_xyz * T_xyz
逆変換 V^-1 は
V^-1 = T_xyz^-1 * R_xyz^-1
ただし、さらに変換が行われるため、これは画面の位置をワールドの位置にマップしません。それがあなたの質問に答えることを願っています。
ここにもう一つの興味深い点があります。ビュー マトリックスは、指定された位置で (原点で、z 方向を向いている) カメラ モデルを整列させる変換の逆です。この関係は、システム変換対モデル変換と呼ばれます。