1

我有一堵不同角度和位置的飞机墙。我想让相机旋转并直视聚焦平面。我创建了一个虚拟平面(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 平面为中心,但不会旋转,因此选定的平面是笔直的。

请帮忙!谢谢。

4

3 回答 3

2

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

如果您知道平面上的三个三维点,则可以计算平面的法线。例如:中心,顶部的中心和右侧的中心。我们称中心为中心C,中心位于顶部M1,中心位于右侧M2

以下是计算法线的方法:

Cross(C - M1, C - M2)

(如果你不知道叉积,请查一下)

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

替代文字

好的,那么我们如何使用这些信息呢?知道平面及其中心的法线,我们可以这样说:

camera_position = plane_position + (plane_normal * distance)

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

camera_direction = plane_normal * -1

这使相机看着飞机。

但是,我不认为 ActionScript 3 使用矢量定义相机查看功能,我认为它使用对象。例如,您可以在平面中心放置一个不可见的小物体,然后将相机对准那里。那应该会给您想要的结果。

于 2010-01-06T18:21:00.613 回答
1

PV3D.org 博客有一个工作示例,应该正是您正在寻找的。

于 2010-01-12T18:20:22.927 回答
1

我认为您想向后工作-首先在要查看的平面(X,Y,Z)(通过平均?)上选择一个点。然后选择距离您希望的那个点的距离 D。

接下来取平面方程http://mathworld.wolfram.com/Plane.html ax+by+cz=d(​​不同的 d)并从那里推导出法向量 n = (a,b,c)。对其进行归一化并乘以 D 以获得 N = (A,B,C)。现在只有两个点可供您查看:(X,Y,Z) +/- (A,B,C)。

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

于 2010-01-06T18:54:51.327 回答