2009-02-26 5 views
3

私は、画面スペースを変換するために逆透視投影

worldview_inverse * (projection_inverse * vector) 

を使用しているワールド空間座標に座標。私は

(x,y,-1,1) 

が近い平面上のポイントに変換し、ラインを接続する私はビュー内のすべてのオブジェクトを照会することができながら、

(x,y,1,1) 

は、はるかに平面上のポイントに変換すると仮定 線と交差する錐台。 変換後、結果のポイントをそれぞれの.wコンポーネントで除算します。 これは遠方の平面では機能しますが、近くの平面上の点は何とか世界の空間の原点に変換されます。

これは逆投影法に頼っている1のw成分と関係があると思います。なぜなら、通常は投影前ではなく、逆投影ではなく1であるからです。私は間違って何をしていますか?

+0

もう少しサンプルコードが必要だと思います。特に原点に近い点を設定している部分 –

+0

また、使用している投影行列を提供できますか?それは相殺されますか? – Coincoin

答えて

4

これは唯一の回避策であることはわかっていますが、遠点と視点を使用して近平面ポイントを推測することができます。

near_point = view_position 
      + (far_point - view_position) * (near_distance/far_distance) 

本当に問題があります。まず、Wで割り切ることを忘れないでください!また、あなたの投影行列に応じて、z = -1ではなく、(x、y、0,1)を試しましたか?

near_point = worldview_inverse * (projection_inverse * vector) 
near_point /= near_point.W 
+0

はい、私はこれを考慮しましたが、今は元の問題の数学的な側面に興味があります;) – heeen

+0

Hehe、そうですね。あなたの本当の問題に取り組むために私の答えを更新しました。 – Coincoin

関連する問題