`

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

阅读更多

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 对象的主要方式:

  • 使用 Matrix3D() 构造函数实例化 新的矩阵。Matrix3D() 构造函数需要使用包含 16 个数值的 Vector 对象,并将每个值放入一个矩阵单元中。例如:var rotateMatrix:Matrix3D = new Matrix3D(1,0,0,1, 0,1,0,1, 0,0,1,1, 0,0,0,1);
  • 设置显示对象的 z 属性 的值。然后从该对象的 transform.matrix3D 属性检索转换矩阵。
  • 通过获取根显示对象的 perspectiveProjection .matrix3D 属性的值,检索用于控制舞台上 3D 对象显示方式的 Matrix3D 对象。

应用多种 3D 转换

 

Java代码  收藏代码
  1. rect1.rotationX = 15;  
  2. rect1.scaleX = 1.2;  
  3. rect1.x += 100;  
  4. rect1.y += 50;  
  5. rect1.rotationZ = 10;  
  6.   
  7. var matrix:Matrix3D = rect2.transform.matrix3D;  
  8. matrix.appendRotation(15, Vector3D.X_AXIS);  
  9. matrix.appendScale(1.211);  
  10. matrix.appendTranslation(100500);  
  11. matrix.appendRotation(10, Vector3D.Z_AXIS);  
  12. rect2.transform.matrix3D = matrix;  

 

使用 Matrix3D 对象重新排序显示

 

为确保 3D 显示对象的层叠顺序 对应于对象的相对深度 ,请使用如下方法:

  1. 使用 Transform 对象的 getRelativeMatrix3D () 方法获取 3D 子显示对象的相对 z 轴 值。
  2. 使用 removeChild () 方法从显示列表中删除对象。
  3. 根据 显示对象的相对 z 轴 值对显示对象进行排序 。
  4. 使用 addChild () 方法以相反顺序将子对象添加到显示列表中。
Java代码  收藏代码
  1. public var faces:Array; . . .  
  2. public function ReorderChildren()  
  3. {  
  4.     for(var ind:uint = 0; ind < 6; ind++)  
  5.     {  
  6.         faces[ind].z = faces[ind].child.transform.getRelativeMatrix3D(root).position.z;  
  7.         this.removeChild(faces[ind].child);  
  8.     }  
  9.     faces.sortOn("z", Array.NUMERIC | Array.DESCENDING);  
  10.     for (ind = 0; ind < 6; ind++)  
  11.     {  
  12.         this.addChild(faces[ind].child);  
  13.     }  
  14. }  
 

通过三角形获得 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

Java代码  收藏代码
  1. graphics.beginFill(0xFF8000);  
  2. graphics.drawTriangles(  
  3. Vector.<Number>([10,10100,1010,100100,100]),  
  4. Vector.<int>([0,1,21,3,2]));  
 

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 ,则会移除负向路径方向(逆时针) 的三角形。对于立方体,朝前的表面具有正向路径方向,而朝后的表面具有负向路径方向:


分享到:
评论

相关推荐

    怎样在Ubuntu Linux上安装最新的FlashPlayer 10

    在安装完成后,可以在浏览器中打开相关网站来检测当前的 FlashPlayer 版本,如果安装正确的话,应该显示版本号为 LNX 10,2,151,49。 需要注意的是,这个版本只支持 32 位机器。 Adobe 公司的 FlashPlayer 是一个...

    Flash_player_10_ActiveX插件For IE

    Flash Player 10 ActiveX 插件是针对Internet Explorer浏览器的一款关键组件,它使得用户能够在网页上顺畅地播放Flash内容,如动画、游戏、视频和交互式应用程序。这个插件在互联网的早期阶段尤其重要,因为当时许多...

    FlashPlayer10

    FlashPlayer10是一款由Adobe公司开发的用于网页浏览器的插件,它允许用户在互联网上享受丰富的交互式内容,如动态图形、动画、视频和音频。这款软件在2008年发布,是Flash Player历史上的一个重要版本,因为它引入了...

    flashplayer_10_sa SWF动画播放工具 本地播放

    标题中的“flashplayer_10_sa”指的是Adobe Flash Player的一个特定版本,主要针对SWF文件进行本地播放。SWF(Small Web Format)是Adobe Flash创作的动画或应用程序的文件格式,广泛应用于网页上的互动内容,如游戏...

    swf文件播放器Adobe Flash Player珍藏版Adobe Flash Player中文电脑版v10.3.181.22

    Adobe Flash Player中文电脑版是一款一种广泛使用的、专有的多媒体程序播放器。它最初由Macromedia编写,在Macromedia被Adobe收购后由Adobe继续开发并分发。Adobe Flash Player最初设计目的为播放2维向量动画,但...

    Win10完全卸载和删除自带Adobe Flash Player操作下载

    Win10完全卸载和删除自带Adobe Flash Player操作下载 在Windows 10操作系统中,Adobe Flash Player是预安装的组件,但是在2021年,Adobe官方宣布停止支持Flash Player 387版本以上的版本,意味着用户不能继续使用新...

    flashplayer10-3_b1_activex_030811

    "flashplayer10-3_b1_activex_030811"是Flash Player的一个特定版本,发布于2011年3月8日,主要面向Windows操作系统,因为文件名中的“activex”意味着它是一个ActiveX控件。 ActiveX是微软为Internet Explorer...

    \flashplayer10

    \flashplayer10\flashplayer10

    flashplayer V10.1.85

    **FlashPlayer V10.1.85:深入解析与应用** FlashPlayer V10.1.85 是一个重要的软件版本,它属于Adobe Flash Player系列,是互联网上广泛使用的多媒体内容播放器。这款软件的核心功能是播放含有Flash技术的交互式...

    flash_player_10

    在Flash Player 10时代,它引入了一些关键特性,如Stage3D(增强了硬件加速图形渲染),以及改进的ActionScript 3.0性能,使得开发者能够创建更复杂的互动应用。然而,随着HTML5的兴起和对更开放标准的需求,Adobe于...

    Macromedia Flash Player 8.0 r22

    很多的朋友反映,将喜欢的Flash动画下载到自己的电脑后总是用IE浏览器或者第三方Flash播放器才能观看,感觉不好,希望用Macromedia的Flash Player播放,可是又很难找到!现在我就发一个最新版本的给大家!不过请注意...

    Install_Flash_Player_10_ActiveX

    标题"Install_Flash_Player_10_ActiveX"表明我们讨论的是Flash Player的第10个版本,专为ActiveX技术设计的安装程序。ActiveX是微软提出的一种组件对象模型,常用于Internet Explorer浏览器,允许网页加载和运行外部...

    64位浏览器的flash插件下载(flashplayer for 64-bit browser)

    在提供的压缩包文件 "flashplayer10_2_p3_64bit_activex_111710.exe" 中,我们可以看到这是一款ActiveX版本的Flash Player,适用于使用Internet Explorer或其他支持ActiveX控件的64位浏览器。文件名中的数字部分(如...

    flashplayer_10_ax_debug

    标题“flashplayer_10_ax_debug”指的是Adobe Flash Player的ActiveX版本的调试器,用于在2011年发布时的最新版本。Flash Player是一款广泛使用的浏览器插件,允许用户在网页上运行富互联网应用程序(RIA),播放...

    Flash Player 卸载工具 Adobe Flash Player Uninstaller 34.0.0.92.rar

    Adobe Flash Player是一款曾经广泛应用于网页浏览器的多媒体播放器,它支持播放动画、视频、音频以及交互式内容。然而,随着技术的发展,特别是HTML5的普及,Flash Player的重要性逐渐下降,且由于安全问题,Adobe...

    FlashPlayer Linux插件

    1. **下载和解压**:首先,你需要从Adobe官方网站或者可信的第三方源下载适用于Linux的Flash Player插件压缩包。下载完成后,使用解压缩工具(如`unzip`或`tar`命令)将其解压。 2. **定位浏览器plugins目录**:...

    Flash Player离线安装包

    Flash Player离线安装包下载

    flashplayer debug 版

    Flash Player Debug版是一款专为开发人员设计的特殊版本,它允许开发者在运行含有ActionScript代码的Flash内容时进行调试。ActionScript是Adobe Flash环境中用于创建交互式内容、动画和应用程序的主要编程语言。与...

Global site tag (gtag.js) - Google Analytics