1

Waht は、Away3D を使用して 2D マウス座標から 3D 座標を取得する正しい方法です。(version 3.6.0) 一般的に曖昧な問題なので、3D 点が固定平面に属するという制限があります。

camera.unproject および plane.getIntersectionLineNumbers メソッドの例がいくつかありますが、カメラが回転している場合や平面が自明でない場合は機能しません。

4

2 に答える 2

2

Away3D がこれをいくつかの優れた関数に実装していると確信していますが、これを行う方法を次に示します。カメラの「フィルム」からワールド空間への正投影を意味していると思います(それがどのように実装されているかわかりません)。

カメラ ビュー プレーンから光線を投影しているので、基本的に光線と平面の交点を見つけようとしています。光線はカメラの「目」から始まり、カメラのビュー プレーンを通過します。

したがって、2 つの 3D 交点は次のようになります。

Point getIntersection(Ray ray) {
  float k, t;
  Point point;
  Vector toPoint;

  k = ray.direction.dot(this.normal);

  if (k != 0.0) {
    t = (this.position - ray.origin).dot(this.normal) / k;
  } else {
    return false;
  }

  if (t < 0.0000001) {
    return false;
  }

  return ray.origin + ray.direction * t;
}

レイトレーサーで同様のコードを使用したので、うまくいくはずです。

于 2011-08-01T17:00:04.133 に答える
1

最初に、マウス クリックが実際に 3D 空間に生成する「光線」を取得する必要があります。次に、その光線とサーフェスの交点を計算して、必要なポイントを見つけます (ここではいくつかの数学があります)。私の場合、ユーザーがクリックした球上のポイントを取得する必要がありました。

「光線」を取得するには:

var vector:Vector3D = new Vector3D(mX/camera.zoom, -mY/camera.zoom, camera.focus);
vector = camera.transform.matrix3D.deltaTransformVector(vector);

上記の「カメラ」オブジェクトに注意してください。

球体を使用した私の実装を見たい場合は、https://github.com/SabinT/Earth3Dをチェックしてください。

于 2013-11-27T18:47:01.637 に答える