- 最后登录
- 2025-2-28
- 注册时间
- 2010-12-6
- 阅读权限
- 100
- 积分
- 14156
  
- 纳金币
- 76544
- 精华
- 23
|
步骤 3:放置相机
YellowPlanet_03.as 包含本节描述的代码。下面,你将研究如何利用 Flare3D 控制相机。 此外,你还将学习一些基本的相机操作理念。 目前,你可以使用许多不同的策略来控制相机的位置。 本节将介绍两个能够简化这一过程的用于 3D 游戏的函数。
查看宇航员(Astronaut)容器
如果你检查 YellowPlanet_03.as 中的代码,你将会注意到Astronaut 被包裹于一个 Pivot3D 对象中。
目前,这一步骤看起来似乎没有必要。 但在将来,它在必要时能够便于更好地控制 astronaut。
查看下列代码,以便了解如何更好地控制 astronaut 的显示: // This creates an empty 3D container and addsthe astronaut to it.container = new Pivot3D();container.addChild( astronaut );//Adds the container to the scene too, otherwise//the objects will not be present on the scene.scene.addChild( container );
使用 setPositionWithReference 设置相机位置
在本范例项目游戏中,宇航员可以在行星上行走。 因此,相机必须能够跟踪他。 通过引用宇航员的当前位置可以现实这一相机行为。你可以使用 setPositionWithReference 来完成这一任务。 这一方法包含于 Pivot3DUtils 之中,而且它允许你确定一个对象与用作引用的另一个对象之间的相对位置。 这意味着你可以对任一与其它对象相关的对象进行转换。
在本游戏中,相机总是位于宇航员之后。 它可以保持与宇航员的相对位置。 相机(与其它在 scene 中的对象一样)具有一个定义其位置和方向的坐标轴。 坐标轴的方向如图 5 所示。![]()
图5. 对象的坐标轴方向
+Z 指向宇航员的方向,而 +Y 指向正上方。 这些矢量被分别称为Up、Dir 和 Right(参见图6)。 图6. Up、Dir 和 Right 的矢量角
假定每个对象具有其自己的坐标轴,下面的代码行将相机相对于宇航员的位置设置为 up (+Y) 80 单位 away (-Z) 20 单位:Pivot3DUtils.setPositionWithReference( scene.camera, 0, 80, -20, container, 0.1 );
正如你看到的那样,通过使用 Flare3D 和一个单行代码即可解决一个复杂的任务。
使用 lookAtWithReference 设置相机的方位在相机处于正确的位置之后,镜头需要对准正确的方向。 使用与通过参考点设置对象的位置相同的策略,你也可以使用参考点寻找游戏中的特定点。
这一方法具有一个名称为 'up' 的附加和可选参数,它是本游戏必需的参数。
通常,Up 矢量总是指向正上方。 在许多情形下,传递一个 null 值即可使得 Flare3D 为你计算该矢量的值(参见图7)。![]()
图7. 控制相机的方位
然而,设想下面的范例:如果你抬起你的手并且利用你的食指指向一个对象,就像一把手枪一样,则你的拇指将自动指向正上方,这是我们期望的结果。 此时已经定义了 Dir 和 Up 矢量。 现在,在你仍然将食指指向相同对象的同时,试图旋转你的手。 在它旋转的过程中,Up 手指(你的拇指)开始改变其方向。 注意,即使你总是保持你的手指向相同方向,但在你旋转你的手的过程中,Up 矢量将会移动。 为了对相机进行编程,以便它能够知道哪个方向是正上方,你需要使用 up 参数。
在本范例游戏中,相机位于宇航员的上方。 相机必须设置为指向下方,以便能够朝向宇航员。 相机的 Up 矢量应该指向宇航员的 Dir矢量(参见图8)。
Pivot3DUtils.lookAtWithReference( scene.camera, 0,0, 0, container, container.getDir(), 0.05 );![]()
图 8. 当 Up 矢量改变时,相机的方位也将随着改变
|
|