透視投影行列と投影中心が与えられた場合、どのように投影平面を導き出すことができますか? たとえば、透視投影行列が 4x4 の同次行列であると仮定します。
1 0 0 0
0 1 0 0
0 0 1 0
0 2 0 0
投影の中心 [0, 0, 0]。このデータから、各点が投影面にどのように投影されるかは明らかです。しかし、このデータを使用して、投影面の正確な方程式/表現を見つけるにはどうすればよいでしょうか?
「投影の中心」(3D シーンでのカメラの効果的な位置) とは異なり、イメージが投影される概念上の平面という意味での具体的な「投影面」は必要ありません。
代わりに、射影行列は、ビューポートの境界と深度マッピングを決定する「クリップ スペース」への変換を決定します。そこからx
、y
座標がさらにスケーリングされ、オフセットされて、ターゲット ピクセル位置が取得されます。ただし、これはいずれも、物理的なカメラの焦点面に何らかの形で対応するシーン内の実際の面には変換されません。
カメラ行列から派生できる関連平面があります。
これはw=0
射影行列の 4 行目です。この平面は投影の中心を通過し、カメラの前のポイントと後ろのポイントを分離します。平面上のどの点w=0
も目に見えることはありません。あなたの例では、この平面は0 2 0 0
XZ 座標平面です。
これはz=0
射影行列の 3 行目です。プレーンと連携してw=0
、深度マッピング機能とニア/ファー クリッピング プレーンを決定します。あなたの例では、この平面は0 0 1 0
、XY座標平面です。
カメラ行列の残りの行も平面を表します。最初の行と 2 番目の行は、それぞれ平面x=0
とy=0
平面です。w=0
ある意味では、平面ほど根本的に具体的ではありません。通常は、クリップ スペース (およびビュー フラスタム) を 4 分割します。w=0
それらは、平面座標との和と差をとることによって、視錐台の水平および垂直境界面を決定します。
x=0
"射影の中心" は、 、y=0
、およびw=0
平面 (つまり、射影行列の 1 行目、2 行目、および 4 行目)の交点です。これは、あなたの例が型にはまらない構成であることを示していることに注意してください。「投影の中心」が明確に定義されておらず、すべてのポイントが のようなクリップ空間座標でマッピングされます。y/w = 1/2
通常、これは 4 分の 1 の水平線になります画面を下に。また、通常、z=0
平面は平面に平行w=0
で、無限遠でのみ交差する必要があることに注意してください(例のようにX軸に沿ってではなく)。
ニア クリップ プレーンとファー クリップ プレーンは、グラフィック システムのクリップ スペース規則に基づいて、z=0
およびプレーンから派生します。w=0
z/w = [near=-1, far=+1]
w=0
その近くのクリップ面は、上記の面と面の合計ですz=0
(0 2 1 0
あなたの例では)0 2 -1 0
例では)。z/w = [near=0, far=-1]
z=0
プレーンです(0 0 1 0
あなたの例では)0 2 1 0
例では、OpenGLニアクリッププレーンと同じです)