1

処理中に単純な 3D ドラッグ アンド ドロップ インターフェイスを構築しており、マウスがオブジェクト上を移動したことを検出したいと考えています。3D モデル座標を画面空間に表示するために、マトリックス変換を行う必要があると想像できます...

私はこの作業の単純なバージョンを持っていますが、問題は、カメラがシーン内を移動すると、取得した座標がおかしくなることです。

では、タイル座標を画面空間に変換するにはどうすればよいでしょうか (screenX と screenY が正しく機能していないため)。

更新: 最終的に、これを行う方法について、Processing サイトから 2 つの例を見つけました。villinthaspamに感謝します。

http://processing.org/hacks/hacks:ピッキング

4

1 に答える 1

3

この問題はピッキングと呼ばれます。マウス ピッキングを検索すると、非常に多くのヒットが得られます。

基本的な理論は次のとおりです。

  1. マウス クリックから x,y 座標を取得します。
  2. これらを目の座標の x、y、z 座標に変換します (つまり、-1 <= x <= 1、-1 <= y <= 1、z=near/far クリップ距離、通常の投影の場合)。
  3. これらの座標を射影行列の逆行列で変換して、ワールド座標を取得します。
  4. これで、取得したばかりのワールド座標に向かう方向の、カメラ位置からの光線ができました。
  5. 考慮したいオブジェクトで光線とオブジェクトの交差テストを行います。光線の原点 (カメラ位置) に最も近い光線と交差するオブジェクトを選択します。
于 2010-02-05T19:53:12.820 に答える