それぞれが複数のポイントを含む複数の 3D ポリゴン (異なる z) として定義された、さまざまな 3D 構造の単純な透視投影を実行しようとしています。構造は、私が定義したさまざまなカメラで見ることができます。これらのカメラは、私のワールド座標の (0,0,z) にワールド カメラ (目) を配置し、look(0,0,0) と up(0,1,0) で定義し、ワールド軸をアルファ ( x 軸について)、ベータ (y について)、およびガンマ (z について)、それによってその特定のカメラのローカル座標系を作成します。[OpenGL でこれを実行できることはわかっていますが、ブラック ボックスを使用するのではなく、自分で実行して理解したいと思います]
グローバル カメラのベースは、ベクトル u、v および w を使用して定義されます。w=(eye-look).normalized =(0,0,1); u=up.cross(w)=(1,0,0) および v=w.cross(u)=(0,1,0)
私は同次座標で作業しているので、u_dashed、v_dashed、w_dashed の変換行列は次のようになります。
T(px,py,pz) = [1,0,0,px;0,1,0,py;0,0,1,pz;0,0,0,1] および R = [u,0; v,0;w,0;0,0,0,1]
すべてをまとめると、
Tr=T(eye-look) x R' x R_zyx x R x T(-(eye-look)) ここで、R' は R の転置であり、R_zyx は結合された順方向回転行列 (ワールド => ローカル座標) です。直交投影行列 (O) に透視変換行列 (P) ( http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf ) を掛けて、組み合わせた変換を決定します。
C=O×P×Tr
最後に、proj=(C x 4Dpoint) を実行し、透視分割 (proj.x/proj.w, proj.y,pro.w) を実行します。
または、各カメラの座標、つまり R_zyx x [0;0;z;1] と Rzyx x [ux,vx,wx,0;uy,vy,wy,0; uz,vz,wz,0;0,0,0,0]?