将 3D 对象投影到 2D 视图上

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

flash.geom 包中的 PerspectiveProjection 类提供了一种简单在 3D 空间中移动显示对象时应用基本透视的简单方式。

如果未显式创建 3D 空间的透视投影,3D 引擎将使用默认的 PerspectiveProjection 对象,该对象存在于根上并会传播到其所有子项上。

用于定义 PerspectiveProjection 对象如何显示 3D 空间的三个属性是:

  • fieldOfView

  • projectionCenter

  • focalLength

修改 fieldOfView 的值会导致自动修改 focalLength 的值,反之亦然,因为这两个属性相互依赖。

如果给定 fieldOfView 值,用于计算 focalLength 的值的公式为:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

通常,您需要显式修改 fieldOfView 属性。

视野

通过操作 PerspectiveProjection 类的 fieldOfView 属性,可以使逐渐靠近观察者的 3D 显示对象变大,而使逐渐远离观察者的对象变小。

fieldOfView 属性指定一个介于 0 到 180 度的角度,该角度确定透视投影的强度。该值越大,沿 z 轴移动的显示对象的扭曲程度就越大。如果 fieldOfView 值较小,则缩放程度较低,使对象看起来在空间中只是稍稍后移。如果 fieldOfView 值较大,则会导致较大的扭曲,并显示为较大的移动。如果达到最大值 179.9999... 度,则会出现极端的鱼眼相机镜头效果。fieldOfView 的最大值为 179.9999...,最小值为 0.00001...。精确的 0 和 180 值是非法值。

投影中心

projectionCenter 属性表示透视投影的消失点。该属性作为相对于舞台左上角默认注册点 (0,0) 的偏移量。

当对象逐渐远离观察者时,该对象将朝消失点倾斜直到最终消失。想象一下无限长的走廊。当朝走廊远处看时,两边的墙壁将聚合到走廊远处的消失点。

如果消失点位于舞台的中心,则走廊将消失于该中心点。projectionCenter 属性的默认值是舞台的中心。例如,如果希望元素出现在舞台的左边,而 3D 区域出现在右边,可将 projectionCenter 设置为舞台右边的点,使之成为 3D 查看区域的消失点。

焦距

focalLength 属性表示视点原点 (0,0,0) 与显示对象在 z 轴上的位置之间的距离。

较长的焦距相当于视野较窄、对象间距离经过压缩的摄远镜头。较短的焦距相当于广角镜头,可获得较宽的视野和较大的扭曲。中等的焦距相当于肉眼所见的效果。

通常,当显示对象移动时,focalLength 属性会在透视转换过程中动态重新进行计算,不过您可以显式设置该属性。

默认透视投影值

在根上创建的默认 PerspectiveProjection 对象具有以下值:

  • fieldOfView:55

  • perspectiveCenter:stagewidth/2, stageHeight/2

  • focalLength:stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

如果您没有创建自己的 PerspectiveProjection 对象,则默认使用这些值。

如果要自行修改 projectionCenterfieldOfView 属性,则可以实例化您自己的 PerspectiveProjection 对象。在这种情况下,新建对象的默认值如下(假设默认舞台大小为 500 x 500):

  • fieldOfView:55

  • perspectiveCenter:250,250

  • focalLength: 480.24554443359375