0

特定のワールドポイントの画面座標を計算する必要があるプロジェクトに取り組んでいます。

私はいくつかの資料を読み、このタスクを 4 つのサブタスクにまとめました。

  1. ワールド ポイントにカメラの逆 TRS 行列を掛けて、カメラ座標のポイントを取得します。
  2. カメラ座標の点に射影行列を掛けて、クリッピング座標の点を取得します。射影行列は次のようになります

    (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;
    
  3. クリッピング座標の点に1 /wを掛けて、 ndcの点を受け取ります。
  4. ndcスクリーン座標に変換します。

これは正常に機能していますが、奇妙な結果とエラーに遭遇しました。カメラ座標のポイントの z 値が 0 の場合、クリッピング座標のポイントの w 値は0になることがわかります。これにより、ステップ 3 で 0 による除算が行われます。

私は何かを見落としましたか、それともこれは正常ですか? カメラの z 軸上のポイントの画面位置を計算する方法はあり(z == 0)ますか、それとも画面の中央を確認して返す必要がありますか?

4

1 に答える 1

1

あなたは中央投影を行っています。カメラ座標では、投影の中心が原点です。投影平面は、カメラの前の xy 平面に平行な任意の平面です (つまり、z != 0)。

カメラ座標で z=0 のポイントがどうなるか想像してみてください。その投影光線は投影平面に平行になります。したがって、平面上にはイメージがありません。それがゼロによる除算が示すものです。

レンダリング プロセスでは、通常、これを回避するためにニア クリッピング プレーンを設定します (つまり、プレーンの前にあるものはすべて無視されます)。これにより、カメラの背後にあるオブジェクトが表示されることも回避されます。

ということで、チェックを入れるif z in camera coordinates < near then ignore。または、左手座標系を使用している場合... > -near ...

于 2015-10-07T12:33:09.450 に答える