2012-01-06 26 views
0

マウスのx、y座標をwebglキャンバスの3次元ワールド座標に変換しようとしています。私はそれを部分的に働かせましたが、世界がどんな軸でも回転するときにいくつかの問題を抱えています。マウス座標をゲーム座標に設定するWebGL

私はレイの開始点と終了点を取得し、その後、通常の0,1,0でフラットプレーンの線対面衝突テストを実行するunprojectメソッドを使用していますが、 0、0

コードはwingsofexodus.comにあります。ソースを表示してください。使用されている関数は、RtoW(実世界、マウスから世界への変換)、lpi(ライン平面交差テスト)、および未処理です。

長い間、私は、マトリックス/ベクトルの数学をやって、数学をやっていて、本を読んでから捨てなければならなかった。

サイトが遅くなることがあります。私のインターネット接続はそれほど素晴らしいものではありません。もし問題があると分かったら、ここにコードをコピーします。

お手伝いいただけるヘルプやリンクがありがとうございます。

答えて

1

あなたは正しい考えを持っているが、私は2つのミスや1つの不要な合併症を参照してください。

  • 合併症:代わりに、回転角度などからビュー行列を計算するためのコードを複製するのを、それのコピーを保存(drawSceneの冒頭に)それを計算し、mmの代わりにそれを使用するとき。または、マトリックススタックが正しい場所にあり、unprojectmvMatrixを使用してください。これにより、それによるエラーを避けることができます。
  • 翻訳結果を非翻訳結果(RtoW)と一緒に参照してください。翻訳は既にmmに含まれているため、間違いです。あなたはそれを倍増またはキャンセルしています。マウスの座標が投影されていない場合は、のワールド座標があります。これは、レイ・コリジョン・テストを行う前にさらに修正する必要はありません。
  • 投影されていない状態では、投影行列を乗算する前にビュー行列を反転しています。 invert(view)*invert(projection)(またはより安い)invert(projection*view)のいずれかを行うことができますが、現在はinvert(projection*invert(view))となっていますが、これは間違っています。

これらは私のところに飛び出したものですが、私はあなたのコードをすべて見直していません。私はそれをmy own version of the sameと比較すると、見えていないように見えます。

+0

ありがとう、私は助けていただきありがとうございます。 – Wolftousen

+0

あなたの提案を実装した後(レンダリング時に使用したマトリックスを使用するのとは別に、キンクアウトをしている間はそのままにしておきたい)、それはうまくいっていますが、マウスをキャンバスの中心。初期回転/平行移動をトップダウンビューに調整して、より簡単に表示できるようにしました。最近私はそれを試してみる機会はあまりありませんでしたが、それを修正する方法はありますか? – Wolftousen

+0

私はしばらくの間私のコンピュータから離れていますので、私は見てみることはできませんが、あなたの説明から、あなたは "真の"オフセンタリングを見ていないのでしょうか?トップダウン透視投影を見て、スクリーンの中心にあるもの以外の投影光線は平面に垂直ではありません。キューブの上、下、または中央など、カーソルと正確に一致させたいものについて考えてみましょう。 –

関連する問題