http://sjkgxf7191.iteye.com/blog/513622
目录:
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 转换
使用 Matrix3D 类可以转换坐标空间内的 3D 点 ,也可以将 3D 点从一个坐标空间映射 到另一个坐标空间。
您可以用 Matrix3D 对象的方法对显示对象执行平移 、旋转 、缩放 和透视投影 。
使用 Vector3D 类及其 x、y 和 z 属性可管理 3D 点。该类还可以表示具有方向和大小 的物理空间矢量 。
通过 Vector3D 类的方法,可以执行有关空间矢量的常见计算,例如加法 、点积 和叉积 计算。
注: Vector3D 类与 ActionScript Vector 类无关 。Vector3D 类包含的属性和方法用于定义和操作 3D 点,而 Vector 类则支持类型对象数组 。
创建 Matrix3D 对象
有三种创建或检索 Matrix3D 对象的主要方式:
应用多种 3D 转换
使用 Matrix3D 对象重新排序显示
为确保 3D 显示对象的层叠顺序 对应于对象的相对深度 ,请使用如下方法:
通过三角形获得 3D 效果
在 ActionScript 中,可以使用 Graphics.drawTriangles () 方法执行位图转换,因为 3D 模型是通过空间中的一组三角形来表示的。
Graphics.drawTriangles() 方法使用 Vector 对象。<Number>,用于指定三角形路径的点位置:
drawTriangles(vertices :Vector.<Number>, indices :Vector.<int> = null, uvtData :Vector.<Number> = null,
culling :String = "none"):void
indices 值是点索引
转换位图
位图转换可在三维对象上提供透视视觉效果或“ 纹理”。
UV 映射
一旦开始处理纹理,就需要使用 drawTriangles() 的 uvtData 参数。
UV 映射是一种纹理化对象的方法。它依赖于两个值:U 水平 (x) 值和 V 垂直 (y) 值。这两个值不是基于像素值,而是基于百分比 。0 U 和 0 V 表示图像的坐上角, 1 U 和 1 V 表示右下角:
可以为三角形的矢量指定 UV 坐标,从而将矢量自身关联到图像上的相应位置:
UV 值与三角形的点保持一致:
Graphics.drawTriangles() 方法也接受关于三维转换的一条可选信息:T 值 。uvtData 中的 T 值表示 3D 透视 ,更具体地说,表示相关顶点的缩放系数 。
用于确定 T 值的等式 为:
T = focalLength/(focalLength + z);
Demo source code见附件压缩包
剔除
在 3D 空间中,三维对象“ 背面 ” 的表面对视点不可见:
因此, Graphics.drawTriangles() 方法采用第四个参数来建立剔除值:
该剔除参数是来自 TriangleCulling 枚举类的值 :TriangleCulling.NONE 、TriangleCulling.POSITIVE 和TriangleCulling.NEGATIVE 。这些值与定义对象表面的三角形路径的方向有关 。用于确定剔除的 ActionScript API 假设 3D形状的所有外向三角形都是以同一路径方向绘制的。一旦三角形面经过旋转后,其路径方向也会改变。此时可以剔除(不呈现)该三角形。
因此,如果 TriangleCulling 值为 POSITIVE ,则会移除正向路径方向(顺时针) 的三角形。如果 TriangleCulling 值为NEGATIVE ,则会移除负向路径方向(逆时针) 的三角形。对于立方体,朝前的表面具有正向路径方向,而朝后的表面具有负向路径方向: