Wahtは、Away3Dを使用して2Dマウスコードから3Dコードを取得する正しい方法です。 (バージョン3.6.0) 一般的にはあいまいな問題なので、3D点がある固定平面に属するという制限があります。FlashでAway3Dを使用して2Dマウスコード用に3D座標を取得する方法はありますか?
camera.unprojectとplane.getIntersectionLineNumbersメソッドではいくつかの例がありますが、カメラが回転しているか平面が自明ではない場合は機能しません。
Wahtは、Away3Dを使用して2Dマウスコードから3Dコードを取得する正しい方法です。 (バージョン3.6.0) 一般的にはあいまいな問題なので、3D点がある固定平面に属するという制限があります。FlashでAway3Dを使用して2Dマウスコード用に3D座標を取得する方法はありますか?
camera.unprojectとplane.getIntersectionLineNumbersメソッドではいくつかの例がありますが、カメラが回転しているか平面が自明ではない場合は機能しません。
私はかなり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;
}
私はレイトレーサに類似したコードを使用するので、それが動作するはずです。
マウスのクリックが実際に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
をチェックしてください