【问题标题】:Papervision3D: Making a camera look at PlanePapervision3D:让相机看平面
【发布时间】:2011-01-02 04:02:44
【问题描述】:

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

请帮忙!谢谢。

【问题讨论】:

  • 您了解这背后的数学原理还是只是在猜测?
  • 大部分是猜测-我对此很陌生。任何帮助将不胜感激。

标签: actionscript-3 papervision3d


【解决方案1】:

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

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

下面是计算法线的方法:

Cross(C - M1, C - M2)

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

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

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

camera_position = plane_position + (plane_normal * distance)

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

camera_direction = plane_normal * -1

这会让相机看到飞机。

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

【讨论】:

    【解决方案2】:

    我认为您想向后工作 - 首先在您想要查看的平面 (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)。

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

    【讨论】:

      【解决方案3】:

      PV3D.org 博客有一个 working example,应该正是您正在寻找的。​​p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多