我有一面不同角度和位置的飞机墙。我想让相机旋转并直视聚焦平面。我创建了一个虚拟平面(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平面为中心但不旋转,以便所选平面直线开启。
请帮忙!感谢。
答案 0 :(得分:2)
你知道你的飞机有正常吗?确实,它决定了飞机面向哪一侧。法线是长度为1的向量。
如果你知道三个三维点,你可以计算一个平面的法线。例如:中心,顶部中心和右侧中心。我们打电话给中心C
,中间位于顶部M1
,中心位于右侧M2
。
以下是计算法线的方法:
Cross(C - M1, C - M2)
(如果你不知道十字产品,请查阅)
这将为您提供箭头所定义的向量:
好的,我们怎样才能使用这些信息?知道飞机的正常及其中心,我们可以说如下:
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应该正是您所需要的。