必要な情報が射影行列に直接保持されているため、視野をいじるよりも簡単にこれを行うことができます。
したがって、射影行列は次のようになります。
xScale 0 0 0
0 yScale 0 0
0 0 -(zf + zn)/(zf - zn) -(2 * zf) / (zf-zn)
0 0 -1 0
z-Far (zf) と z-Near (zn) の xScale と yScale は既知です。
正しい Z 深度を選択するには、w が最終的に 1 になることを確認することから始めます。このように、w で割っても何も変わりません。
幸いなことに、w は非常に簡単に取得できます。これは単に入力 z の負の値です。したがって、z に -1 を入力すると、1 の aw が返されます。
1024x768 の解像度を使用しており、適切なスケールで必要なテクスチャは 256x256 であると仮定します。
さらに、長方形は左上が -1, 1 の位置にあり、右下が 1, -1 の位置に設定されていると仮定します。
それでは、これらを接続して z を計算してみましょう。
以下を使用する場合:
-1, 1, -1, 1
1, -1, -1, 1
次のように何かを取得します。
1 / xScale, -1 / yScale, someZThatIsn'tImportant, 1
-1 / xScale, 1 / yScale, someZThatIsn'tImportant, 1
ビューポート変換は、-1、1 が 0、0 および 1、-1 が 1024,768 になるようにこれらの値を変換します。
したがって、 ((x + 1) / 2) * 1024 および ((1 - y) / 2) * 768 を実行することで機能することがわかります
したがって、xScale が 3/4 で yScale が 1 であると仮定すると、それを差し込むと次のようになることがわかります。
左上の場合:
x = -3/4
=> ((-3/4 + 1) / 2) * 1024
=> 128
y = 1
=> ((1 - 1) / 2) * 768
=> 0
右下の場合:
x = 3/4
=> ((3/4 + 1) / 2) * 1024
=> 896
y = -1
=> ((1 + 1) / 2) * 768
=> 768
したがって、画面の中央に 768x768 ピクセルの画像があることがわかります。明らかに 256x256 を取得するには、w を 3 にする必要があります。これにより、w 除算後の座標がサイズの 3 分の 1 になります ((xScale * 1024) / 256 は、(yScale * 768) / 256 に等しい必要があります)。投影。
したがって、最終的な座標が次のようになっているとします。
-1, 1, -3, 1
and
1, -1, -3, 1
(w-divide の後) 以下を取得します。
-0.25, 0.333, unimportantZ, 1
and
0.25, -0.333, unimportantZ, 1
上記のスクリーン式を実行すると、次のようになります。
左上の場合:
x = -0.25
=> ((-0.25 + 1) / 2) * 1024
=> 384
y = 0.3333
=> ((1 - 0.3333) / 2) * 768
=> 256
右下の場合:
x = 0.25
=> ((0.25 + 1) / 2) * 1024
=> 640
y = -0.333
=> ((1 + 0.33333) / 2) * 768
=> 512
640 - 384 = 256
512 - 256 = 256
したがって、正しいピクセルサイズで最終的な四角形が得られます...