2011-08-01 28 views

回答

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; 
} 

我在光线追踪中使用类似的代码,所以它应该工作。

0

您必须首先获取鼠标点击实际产生的“射线”到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

相关问题