3D ポイントをラスタライズする過程で、単純な透視投影を実行しようとしています。ここにすべてのマトリックスとその他の情報があります。すべての行列は行優先です。座標系は右手です。
カメラは [0,0,-1] にあり、ポイントは [0,0,0] にあります (行列演算では w=1)。
モデル ビュー マトリックス (カム マトリックスの逆、つまり、tx = 0;ty = 0; tz = 1):
[1 0 0 tx]
[0 1 0 ty]
[0 0 1 tz]
[0 0 0 1 ]
パースペクティブ マトリックス:
[f/aspect,0,0,0]
0,f,0,0
0,0,-(near+far)/(near-far),2*far*near/(near-far)
0,0,1,0]
ビューポートは正方形なので、アスペクトは 1 です。遠方 = 100 および近方 = 0.1 f = 1/tan(fovDegress*M_PI/360);
結果のマトリックスは次のとおりです。
1.94445, 0, 0, 0
0, 1.944445, 0, 0
0, 0, 1.020202, -2.020202
0, 0, 1, 0
ここで、モデル ビュー マトリックスを適用し、次に射影マトリックスをポイント ベクトルに適用して、新しいポイント Pv = {x,y,z,w} を取得します。次に、正規化された座標 x' = x/w を取得します。y' = y/w; z' = z/w; x' と y' は、点が錐台にある限り、常に [-1,1] の間にあります。しかし、z' の場合はそうではありません。ポイントがカメラの近くに近づくにつれて、z' 値は指数関数的に増加します。ポイントが [0,0,0] にある場合、z' 値は -1 に等しくなります。
ここで、いくつかの行を切り取る必要があるため、z' 値が [1,-1] の間にある必要があります。私の手順の何が問題なのか疑問に思っています。ありがとうございました。