Waht是使用Away3D從2D鼠標座標獲取3D座標的正確方法。 (版本3.6.0) 一般是ambigoius問題,所以3D點屬於某個固定平面有限制。有沒有辦法在Away3D的Flash平臺上獲得2D座標的3D座標?
camera.unproject和plane.getIntersectionLineNumbers方法有一些例子,但是如果相機旋轉或平面不平凡,它們就不起作用。
Waht是使用Away3D從2D鼠標座標獲取3D座標的正確方法。 (版本3.6.0) 一般是ambigoius問題,所以3D點屬於某個固定平面有限制。有沒有辦法在Away3D的Flash平臺上獲得2D座標的3D座標?
camera.unproject和plane.getIntersectionLineNumbers方法有一些例子,但是如果相機旋轉或平面不平凡,它們就不起作用。
我很確定Away3D在一些不錯的功能中實現了這個功能,但是這裏是我如何去做的。我假設你是指從相機「電影」到世界空間的正投影(不知道如何實現)。
您正在投影相機視圖平面的光線,因此您基本上正在尋找光線與平面的交點。射線開始於相機的「眼睛」並穿過相機的視平面。
所以交集的兩者之間的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