Papervision3D:让相机看一下Plane

时间:2010-01-06 17:49:53

标签: actionscript-3 papervision3d

我有一面不同角度和位置的飞机墙。我想让相机旋转并直视聚焦平面。我创建了一个虚拟平面(lookAtMe),它补间到我点击的平面,如下所示:

    private function planeClicked(e:InteractiveScene3DEvent):void 
    {
        lookAtTarget.copyTransform(this);

        var time:Number = 1;
        var tweenObject:Object = {};
        tweenObject.x = lookAtTarget.x;
        tweenObject.y = lookAtTarget.y;
        tweenObject.z = lookAtTarget.z;
        tweenObject.rotationX = lookAtTarget.rotationX;
        tweenObject.rotationY = lookAtTarget.rotationY;
        tweenObject.rotationZ = lookAtTarget.rotationZ;
        tweenObject.onUpdate = onSeatTween;
        tweenObject.ease = Cubic.easeInOut;
        TweenMax.to(lookAtMe, time, tweenObject);
    }

    private function onSeatTween():void
    {
        camera.lookAt(lookAtMe);
    }

相机以looAtMe平面为中心但不旋转,以便所选平面直线开启。

请帮忙!感谢。

3 个答案:

答案 0 :(得分:2)

你知道你的飞机有正常吗?确实,它决定了飞机面向哪一侧。法线是长度为1的向量。

如果你知道三个三维点,你可以计算一个平面的法线。例如:中心,顶部中心和右侧中心。我们打电话给中心C,中间位于顶部M1,中心位于右侧M2

以下是计算法线的方法:

Cross(C - M1, C - M2)

(如果你不知道十字产品,请查阅)

这将为您提供箭头所定义的向量:

alt text

好的,我们怎样才能使用这些信息?知道飞机的正常及其中心,我们可以说如下:

camera_position = plane_position +(plane_normal * distance)

这会将相机放在距离飞机一定距离的正确位置。

camera_direction = plane_normal * -1

这使相机看向飞机。

但是,我不认为ActionScript 3定义了带矢量的相机功能,我认为它使用了一个对象。例如,您可以在平面的中心放置一个不可见的小物体,并将相机指向该位置。这应该会给你你想要的结果。

答案 1 :(得分:1)

我认为你想要倒退 - 首先在平面上选择一个点(X,Y,Z)(通过平均?)你想看的。然后从你想要的那个点开始选择距离D.

接下来将平面http://mathworld.wolfram.com/Plane.html ax +的等式乘以+ cz = d(不同的d)并从那里推导出法向量n =(a,b,c)。将其归一化并乘以D得到N =(A,B,C)。现在只有两点你可以从中看到:(X,Y,Z)+/-(A,B,C)。

所以,现在选择你是想从后面还是从前面看 - 这会影响+ vs的选择 - 我只是不知道哪个是哪个。

答案 2 :(得分:1)

PV3D.org博客的working example应该正是您所需要的。