了解 Flash Player 和 AIR 运行时中的 3D 显示对象

Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本

在 Flash Player 10 之前的 Flash Player 版本以及 Adobe AIR 1.5 之前的 Adobe AIR 版本中,显示对象有 xy 两个属性,用于在 2D 平面上放置显示对象。从 Flash Player 10 和 Adobe AIR 1.5 开始,每个 ActionScript 显示对象都有一个 z 属性,利用该属性可以沿 z 轴放置显示对象,z 轴一般用于指示深度或距离。

Flash Player 10 和 Adobe AIR 1.5 引入了对 3D 效果的支持。但是显示对象本质上还是平面的。每个显示对象(例如 MovieClip 对象或 Sprite 对象)最终会呈示于二维的单一平面上。通过 3D 功能,可在三个维中放置、移动、旋转以及按其他方式转换这些平面对象,还可管理 3D 点以及将这些点转换为 2D x、y 坐标,这样您就能将 3D 对象投影到 2D 视图上。通过这些功能,可以模拟出丰富的 3D 效果。

ActionScript 使用的 3D 坐标系与其他坐标系不同。在 ActionScript 中使用 2D 坐标系时,沿 x 轴向右移动过程中,x 的值增大,而沿 y 轴向下移动过程中,y 的值增大。3D 坐标系仍遵从这一惯例,但另外添加了 z 轴,该轴的值随着远离视点而增大。

ActionScript 3D 坐标系中 x、y 和 z 三条轴的正向。
A.
+Z 轴

B.
原点

C.
+X 轴

D.
+Y 轴

注: 请注意,Flash Player 和 AIR 始终在图层中表示 3D。也就是说,如果对象 A 在显示列表中位于对象 B 的前面,则无论这两个对象的 z 轴值为多少,Flash Player 或 AIR 都始终将 A 呈示在 B 的前面。若要解决显示列表顺序与 z 轴顺序之间的冲突,可使用 transform.getRelativeMatrix3D() 方法进行保存,然后重新对 3D 显示对象的图层排序。有关详细信息,请参阅使用 Matrix3D 对象重新排序显示

以下 ActionScript 类支持与 3D 相关的新功能:

  1. flash.display.DisplayObject 类包含 z 属性和新的旋转和缩放属性,这些属性用于操作 3D 空间中的显示对象。DisplayObject.local3DToGlobal() 方法提供了一种将 3D 几何图形投影到 2D 平面的简单方式。

  2. flash.geom.Vector3D 类可用作管理 3D 点的数据结构。该类还支持矢量数学运算。

  3. flash.geom.Matrix3D 类支持复杂的 3D 几何转换,例如旋转、缩放和平移。

  4. flash.geom.PerspectiveProjection 类控制着将 3D 几何图形映射到 2D 视图的相关参数。

在 ActionScript 中,有两种不同的模拟 3D 图像的方式:

  1. 在 3D 空间中排列平面对象并进行动画处理。这种方式需要使用显示对象的 x、y 和 z 属性来对显示对象进行动画处理,或者使用 DisplayObject 类设置旋转和缩放属性。使用 DisplayObject.transform.matrix3D 对象可以实现更为复杂的运动。DisplayObject.transform.perspectiveProjection 对象可自定义显示对象在 3D 透视中的绘制方式。如果需要对主要包含平面的 3D 对象进行动画处理,可以使用这种方式。这种方式的例子包括 3D 图库或者 3D 空间中排列的 2D 动画对象。

  2. 从 3D 几何图形生成 2D 三角形,然后用纹理呈示这些三角形。要使用这种方式,必须首先定义和管理有关 3D 对象的数据,然后将这些数据转换成要呈示的 2D 三角形。可以将位图纹理映射到这些三角形,然后使用 Graphics.drawTriangles() 方法将三角形绘制为图形对象。这种方式的例子包括从文件中加载 3D 模型数据并将模型呈示到屏幕上,或以三角形网格形式生成和绘制 3D 图形。