Waht是使用Away3D从2D鼠标坐标获取3D坐标的正确方法。 (版本3.6.0) 这是一般的ambigoius问题,因此3D点属于某个固定平面存在限制。
有一些使用camera.unproject和plane.getIntersectionLineNumbers方法的示例,但如果相机被旋转或平面不是微不足道,它们就不起作用。
答案 0 :(得分:1)
我很确定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;
}
我在我的光线跟踪器中使用了类似的代码,所以它应该可以工作。
答案 1 :(得分:0)
你必须首先获得一个&#34; ray&#34;鼠标单击生效进入3D空间。 然后通过计算该光线与表面的交点来找到所需的点(这里有一些数学)。就我而言,我必须在用户点击的球体上得到点。
获得&#34; ray&#34;:
var vector:Vector3D = new Vector3D(mX/camera.zoom, -mY/camera.zoom, camera.focus);
vector = camera.transform.matrix3D.deltaTransformVector(vector);
注意&#34;相机&#34;上面的对象。
如果您想查看我对球体的实施情况,请查看https://github.com/SabinT/Earth3D