将 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 对象,则默认使用这些值。
如果要自行修改
projectionCenter
和
fieldOfView
属性,则可以实例化您自己的 PerspectiveProjection 对象。在这种情况下,新建对象的默认值如下(假设默认舞台大小为 500 x 500):
|
|
|