遠近法カメラ マトリックスを使用して、一連の 3D ポイントを画面に投影しようとしています。私はワールド空間を持っていません (またはそれを恒等行列と見なします)、私のカメラにはカメラ空間がありません (またはそれを恒等行列と見なします)。私はオブジェクト空間に 4x4 行列を持っています。
オブジェクト マトリックスを取得し、次のメソッドで生成されたカメラ パースペクティブ マトリックスを掛けています。
Matrix4 createPerspectiveMatrix( Float fov, Float aspect, Float near, Float far )
{
Float fov2 = (fov/2) * (Math.PI/180);
Float tan = Math.tan(fov2);
Float f = 1 / tan;
return new Matrix4 (
f/aspect, 0, 0, 0,
0, f, 0, 0,
0, 0, -((near+far)/(near-far)), (2*far*near)/(near-far),
0, 0, 1, 0
);
}
次に、ポイント [x, y, z, 1] を取得し、それを遠近行列とオブジェクト行列の結果の乗算で乗算します。
次の部分は私が混乱している場所です.-1と1、または0と1の範囲内でこれらのポイントを取得する必要があると確信しています.最初の値のセットがある場合、次に、画面座標の x 値と y 値の画面の幅と高さをそれぞれポイントに掛けるか、値に画面の高さ/2 と幅/2 を掛けて、同じ値をそれぞれのポイントに追加します。
これがどのように達成されるか、またはこれのどこで間違っている可能性があるかを段階的に教えていただければ、非常に高く評価されます!! :D
皆さん、よろしくお願いします!
PS恒等/変換マトリックスの例では、私のモデルのマトリックス形式は次のとおりです。
[1, 0, 0, tx,
0, 1, 0, ty,
0, 0, 1, tz,
0, 0, 0, 1 ]