特定のワールドポイントの画面座標を計算する必要があるプロジェクトに取り組んでいます。
私はいくつかの資料を読み、このタスクを 4 つのサブタスクにまとめました。
- ワールド ポイントにカメラの逆 TRS 行列を掛けて、カメラ座標のポイントを取得します。
カメラ座標の点に射影行列を掛けて、クリッピング座標の点を取得します。射影行列は次のようになります
(1 / tan (fov * 0.5 * PI / 180)), 0, 0, 0; 0, (1 / tan (fov * 0.5 * PI / 180)), 0, 0; 0, 0, - ((f + n) / (f - n)), - (2 * f * n / (f - n)); 0, 0, -1, 0;
- クリッピング座標の点に1 /wを掛けて、 ndcの点を受け取ります。
- ndcをスクリーン座標に変換します。
これは正常に機能していますが、奇妙な結果とエラーに遭遇しました。カメラ座標のポイントの z 値が 0 の場合、クリッピング座標のポイントの w 値は0になることがわかります。これにより、ステップ 3 で 0 による除算が行われます。
私は何かを見落としましたか、それともこれは正常ですか? カメラの z 軸上のポイントの画面位置を計算する方法はあり(z == 0)
ますか、それとも画面の中央を確認して返す必要がありますか?