基于Flex的开源3D引擎_第1页
基于Flex的开源3D引擎_第2页
基于Flex的开源3D引擎_第3页
基于Flex的开源3D引擎_第4页
基于Flex的开源3D引擎_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于flex的开源3d引擎1 papervision3d三维引擎1.1 papervision3d引擎组成1.2 papervision3d各类之间关系2 panosalado全景图像显示引擎2.1 pansalado的整体构成2.2 panosalado引擎中的核心类随着电脑硬件的发展,在人们对视觉感官要求越来越高,flash作为当今一款主流的web插件,人们对它能够实现商业应用级绚丽高效三维显示也越发期待,但是简单、特定的三维显示不仅非常难以适应多变的应用场合、同时也在实现过程中浪费了大量的人力。使用actionscript语言编制flash播放器内置的三维引擎技术成为大家的共识,现在国内

2、外已经有多种actionscript三维引擎诞生,比较流行的主要有:papervision3d、alternativa 3d、away3d、sandy 3d以及国内的newx3d。其中以papervision3d最为出名,而且它在实际项目中往往有上佳的表现。1 papervision3d三维引擎papervision3d是一个遵循mit(麻省理工大学)协议的开源3d引擎,使用actionscript语言编制。papervision3d三维引擎自从2008年3月份开源以来经过两年的持续改进,现在已经达到了三维引擎的基本功能,拥有包括:number3d、numberuv、matrix3d等各种基础

3、数据类、3d视窗类、3d容器类、3d摄像机类、纹理材质类、各种渲染效果类、模型文件加载显示类等三维引擎模块。得益于actionscript 3.0计算性能的改进,papervision3d在显示三维效果时效率有了很大的提高,已经可以满足普通三维场景的应用,特别是其支持直接导入标准的dae和ase三维模型文件,这意味着在创作三维场景时可以直接使用大部分专业3d工具制作出来的模型,从而可以大大提高开发效率,降低系统运算时的cpu开销。1.1 papervision3d引擎组成papervision3d主要由7个包组成:core核心包,geom包,cameras包,scenes包,event包,ma

4、terial包,object包。各个包的构成如下:core核心包number3d类:3d坐标系中的值类型定义;numberuv类:uv坐标系中的值类型定义;matrix3d类:4×3矩阵定义,矩阵算法操作定义;displayobject3d类:表示场景中的3d对象(也包括摄像机和其目标),并提供对象基本操作函数;displayobjectcontainer3d类:displayobject3d容器的所有对象的基类,每个displayobjectcontainer3d对象有自己子容器列表;cameraobject3d类:所有摄像机的基类;sceneobject3d类:所有场景的基类场景

5、是放置物体的地方,它包含3d环境场景管理所有渲染的物体,它扩展了displayobjectcontainer3d类来分配显示物体sceneobject3d是抽象基类;geometryobject3d类:包含几何对象的类;materialobject3d类:所有材质的基类。geom包vertex2d类:2d顶点数据定义;vertex3d类:3d顶点数据定义;mesh3d类:创建和显示由顶点和三角形组成的3d物体;face3d类:渲染线性采样的纹理贴图的三角形,也支持颜色填充和轮廓线。cameras包camera3d类:用于创建及操作可观察目标对象周围景物的摄像机对象;freecamera3d类:

6、用于创建及操作可随指定方向进行观察的活动摄像机对象。scenes包scene3d类:用于创造在同一容器中渲染三维可视环境的舞台;moviescene3d类:用于创造在同一容器中渲染三维可视环境的舞台,支持通过movie的方式。events包fileloadevent类:模型文件导入时事件传递类。materials包bitmapmaterial类:创建使用bitmapdata对象的纹理;colormaterial类:创建使用单颜色的纹理;wireframematerial类:创建使用切线的纹理;bitmapassetmaterial类:创建使用存放在bitmap库中的样板的纹理;bitmapfi

7、lematerial类:创建使用外部导入的bitmap文件类型的纹理;moviematerial类:创建使用存在的movieclip实例的贴图,该纹理可以是动画的或者透明的。movieclip实例的当前的缩放和颜色值将会被使用,但旋转则会被舍弃;videostreammaterial类:继承自moviematerial类,不同在于该类可以使用流媒体的movieclip;movieassetmaterial类:继承自moviematerial类,创建使用存放在movie库中的样板的纹理;materialslist类:材质列表。objects包plane类:继承自mesh3d类。创建并显示长方形对

8、象;paperplane类:继承自mesh3d类,主要用来测试一个对象的方向。1.2 papervision3d各类之间关系场景类的父类与子类的关系如图1:图1 scene类的继承关系材质类是可显示的特殊对象,单独从eventdispatcher中继承,材质类根据材质的不同特性分为了线性材质、贴图材质与颜色材质。贴图材质又根据贴图的来源与特性分为了moviematerial、bitmapfilematerial、bitmapassetmaterial以及materiaslist,它的继承关系如图2图2 材质类的继承关系papervision3d引擎的的顶级类(顶级类就是不需要导入的类)包括nu

9、mber3d、number2d、vertex2d、vertex3d、face3d、matrix3d,这些为三维坐标下中的基本变量类型。还有fileloadevent用于支持模型、材质文件的处理。其他几个顶级类为从flash的eventdispatcher继承,分别为geometryobject3d、materialobject3d、displayobjectcontainer3d,这三种顶级类扩展出其他三维引擎所需的丰富组件类.papervision3d中顶级类的关系如图3所示:图 3 papervision3d的顶级类papervision3d中的所有能够显示的物体都是对象,这些对象的父类是

10、displayobject3d,displayobject3d类中包含了三维对象基本的属性值、操作函数。通过继承,cameraobject3d拥有camera3d与freecamera3d子类,两者分别用于固定位置与可活动位置的摄像机控制。collada类专门负责解析、显示collada标准三维模型。vertices3d类衍生出众多的显示组件,方便了系统的开发。显示类继承关系如图4。图4 papervision3d显示类继承关系图2 panosalado全景图像显示引擎panosalado是一个基于360度全景视图的国外开源flash引擎,该引擎可以塑造出球形,圆柱体,正方体,平面的360度全

11、景,还能导入qtvr视频,这个开源引擎是基于前一小节提到的开源引擎papervision3d,它对papervision3d引擎在3维空间全景展现方面做了极大的扩展。而且使得利用它开发能够像flash和flex开发一样简洁,里面所有控件以及功能都能够在该引擎中找到100%的源码,所有源码也没有依赖任何商业组件。该引擎开发存在着极大的自由,对于as3.0编程熟手完全可以涉及该引擎内部进行编程,即使as3.0新手亦可通过调用引擎内部api,在配置文件中配置自己的插件集成进去。在作者的系统中,将对整个panosalado引擎进行修改扩展,从而能够使得修改后的引擎符合系统的需求,同时由于panosal

12、ado引擎是完全基于papervision3d的,所以,对于有些功能,将直接使用papervision3d的api函数进行实现。2.1 pansalado的整体构成pansalado基本是对papervision3d的扩展应用,虽然papervision3d功能很强大,但是一直没有一个基于flex的3d引擎专门用于构造虚拟空间的,panosalado的出现,正好填补这一空白。pansalado引擎对于实现虚拟空间的构成,很有自己的特色,是通过配置xml实现专门的模块的导入,所有关于全景信息以及显示样式信息通过xml配置好,然后经过moduleloader类所生成的moduleloader.sw

13、f读取名为panosalado的xml文件,然后关联到相关外部资源,最后完成资源导入生成一个简单的全景浏览系统,对于整个全景系统一些界面上的扩展,也可以以插件的形式通过xml配置,集成入系统。整个关联过程如图5所示图 5 panosalado系统的整体结构一个简单的xml配置示例如下:<?xml version="1.0" encoding="utf-8"?> <panosalado>                    

14、;     <layer id="meter" url="plugins/panosaladoloadmeter.swf" depth="1"/>     <layer id="panosalado" url="panosalado.swf" depth="0" >                 <

15、;spaces onstart="loadspace:space1">                 <space id="space1">                 <sphere id="dark_blue_room_pano_preview">          

16、                              <file>images/dark_blue/dark_blue_prev.jpg</file>                 </sphere>               

17、60;             </space>                             </spaces>         </layer> </panosalado>  其中每个layer代表一个插件,panosalado的核心实现也是作为一

18、个插件配置入panosalado.xml中的,其中id标识每个独立插件,而depth属性则是说明显示层次的。如果是panosalado部分,里面子配置部分则说明的是采用什么方式进行显示全景以及所关联到的外部资源,如这里是用sphere球体的方式。利用xml配置文件和模块分块导入的方式,使得panosalado引擎在修改和扩展方面显的更为灵活。2.2 panosalado引擎中的核心类zephyr .camera包:pscamera3d 类:pscamera3d 继承于papervision3d中的camera3d类,作用相当于用户的“眼睛”,是用户观看全景图的媒介。zephyr .object包:cube类:cube类继承于papervision3d中的trianglemesh3d类,主要是实现图片映射到正方体中展现全景效果。cyliner类:cyliner类继承于papervision

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论