首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

[转]Flash Player 十' s new 3D effects(二)

2012-12-20 
[转]Flash Player 10 s new 3D effects(二)http://sjkgxf7191.iteye.com/blog/513535?目录:?Flash Player

[转]Flash Player 10' s new 3D effects(二)

http://sjkgxf7191.iteye.com/blog/513535

?

目录:

?

Flash Player 10' s new 3D effects(一)

Flash Player 10' s new 3D effects(二)

Flash Player 10' s new 3D effects(三)


参考资料:

?

Adobe ActionScript 3.0 Programming 第二十三章 在三维环境中工作

AdvancED_ActionScript 3.0 第七章 3D IN FLASH 10

?

创建和移动 3D 对象

?

下面的代码设置名为“leaf” 的显示对象的坐标:

Java代码??[转]Flash Player 十' s new 3D effects(二)
  1. leaf.x?=?100;?leaf.y?=?50;?leaf.z?=?-30;??

在 leaf 的?Transform?对象的?matrix3D?属性中,可以查看这些值,以及从这些值派生出的属性:

Java代码??[转]Flash Player 十' s new 3D effects(二)
  1. var?leafMatrix:Matrix3D?=?leaf.transform.matrix3D;??
  2. trace(leafMatrix.position.x);??
  3. trace(leafMatrix.position.y);??
  4. trace(leafMatrix.position.z);??
  5. trace(leafMatrix.position.length);??
  6. trace(leafMatrix.position.lengthSquared);??

?

在 3D 空间中移动对象

Java代码??[转]Flash Player 十' s new 3D effects(二)
  1. var?depth:int?=?1000;??
  2. function?ellipse1FrameHandler(e:Event):void??
  3. {??
  4. ????ellipse1Back?=?setDepth(e,?ellipse1Back);??
  5. ????e.currentTarget.z?+=?ellipse1Back?*?10;??
  6. }??
  7. ??
  8. function?ellipse2FrameHandler(e:Event):void??
  9. {??
  10. ????ellipse2Back?=?setDepth(e,?ellipse1Back);??
  11. ????e.currentTarget.z?+=?ellipse1Back?*?20;??
  12. }??
  13. ??
  14. function?setDepth(e:Event,?d:int):int??
  15. {??
  16. ????if(e.currentTarget.z?>?depth)??
  17. ????{??
  18. ????????e.currentTarget.z?=?depth;??
  19. ????????d?=?-1;??
  20. ????}??
  21. ????else?if?(e.currentTarget.z?<?0)??
  22. ????{??
  23. ????????e.currentTarget.z?=?0;??
  24. ????????d?=?1;??
  25. ????}??
  26. }??

?

在 3D 空间中旋转对象

?

可以通过三种方式旋转对象,具体取决于如何设置对象的旋转属性:rotationX?、rotationY?和?rotationZ?。


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


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 值较大,则会导致较大的扭曲,并出现较大的移动。如果达到最大值 180 度,则会出现极端的鱼眼照相机镜头效果。

?

投影中心


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


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


如果消失点位于舞台的中心,则走廊将消失于该中心点。projectionCenter 属性的默认值是舞台的中心?。

?

焦距


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


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


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

?

默认透视投影值


在根上创建的默认 PerspectiveProjection 对象具有以下值:
??fieldOfView?: 55
??perspectiveCenter?: stagewidth/2, stageHeight/2
??focalLength?: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

?


[转]Flash Player 十' s new 3D effects(二)

?

示例:透视投影:

?

见附件压缩包

热点排行