J2ME在三维可视化中的应用_第1页
J2ME在三维可视化中的应用_第2页
J2ME在三维可视化中的应用_第3页
J2ME在三维可视化中的应用_第4页
J2ME在三维可视化中的应用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、J2ME 在三维可视化中的应用摘要 :首先系统地介绍了 J2ME 由来及其体系结构 ,然 后详细描述了移动 3D 图形 API 在三维可视化中的具体实现 , 包括 3D 对象的定义和模型渲染 ,以及为增加可视化真实性的 光照和纹理映射。关键词 :三维可视化 ;J2ME(Java 2,Micro Edition);JSR184; 配置 ;简表中图分类号 :TP311 文献标识码 :A 文章编 号:1009-3044(2009)13-3535-031 引言随着移动计算和无线通信技术的发展 ,特别是移动三维 可视化技术的不断成熟 ,移动终端迎来了 3D 时代。 J2ME 由 于其跨平台、 面向对象、

2、 内置安全等优点 ,已经成为移动终端 上的主流开发语言之一。 JSR184 作为 J2ME 的一个可选包 , 是以 OpenGL 为基础的精简版 ,一共有 30 个类。它为 Java 移 动应用程序定义了一个简洁的 3D API 接口 ,可以方便地实现 3D 应用。2 J2ME 简介J2ME 概述J2ME最早在1999年6月的JavaOne大会上被正式提出 是 Sun 公司专门为开发小型的资源受限的消费性电子设备的 应用程序所提供新的Java版本,它被广泛的使用于手机、PDA 及电视机顶盒等众多小型资源受限设备中。由于此Java版本的虚拟机的大小仅仅需要数百 KB, 因此又被称为“ K-Jav

3、a”。J2ME 实际上是一系列规范的集合 ,由 Java Community Process(Java社区组织,JCP)制定并发布相关的 Java规范请求 (JSR),各个厂商按照规范在自己的产品上进行实现,但是必须要通过 TCK(Technical Compatible Kit, 兼容性测试包 )测试来 确保兼容性。2.1 J2ME 平台的体系结构J2ME平台由多种配置(Configuration)、简表(Profile)和可 选包(Optional Package)组成。平台的实现者和应用程序的开 发者可以从中选择并组合出一个完整的 Java 运行环境来满 足特定范围内的设备要求。其体系结

4、构如图 1。2.1.1 配置目前,J2ME可用的配置有两种:CLDC(Connected Limited Device Configuration, 连接受限设备配置 )和 CDC(connected Device Configuration , 连接设备配置 )。CLDC 是两个配置中较小的一个 ,为具有间断性联网能 力、较慢的处理速度和受限内存的设备设计的。这些设备包 括移动电话、双工呼叫器和入门级的 PDA, 它们通常具有 16位或 32 位的 CPU,128KB512KB 内存空间CDC 是为处理能力较强、 内存空间更大、 联网能力更出 色的设备设计的。 这些设备包括电视机顶盒、 车载

5、娱乐系统、 高端 PDA 等,它们通常具有 32 位或 64 位处理器 ,2MB 以上的 内存空间。需要说明的是 ,移动终端设备发展非常快 ,上述的硬件区 分标准已经不适合现在的移动终端设备了。2.1.2 简表 简表是架构在配置之上的规范 ,因此每种简表都会声明 它根植于的配置种类。简表针对各种不同硬件设备的特性定 义了高级的API,这些高级的API通常是与其他硬件设备不相 关的扩充类库。 MIDP 是基于 CLDC 配置上的简表 ,描述定制 了通讯产品中诸如界面 ,网络连接等类库和资源 ,开发人员可 以在描述的基础上更加方便简洁地开发程序。在 CDC 类产 品中应用得比较多的描述有 Pers

6、onal Profile 和 RMI Profile 。2.1.3 厂商可选包除了配置与简表之外 ,在 J2ME 规范之中还定义了厂商可 选包 ,可以对 J2ME 平台进行扩展。其中 CLDC 上的 JSR184 主要用来在资源受限设备上开发 3D 图形的应用程序。3 移动 3D 图形 API 在三维可视化中的具体实现移动3D图形API(JSR184)提供了一套用于移动设备上 的3D编程API。由于JSR184需要使用浮点数运算,所以需要 的最小版本是CLDC1.1。JSR184支持两种模式:立即模式和 保留模式。下面是使用立即模式建模的步骤 :3.1 定义 3D 对象JSR184 提供了 V

7、ertexArray 和 VertexBuffer 两个类来保 存顶点信息 ,其中 VertexArray 类用处比较多 ,也比较灵活。VertexArray 类有四个作用 :保存顶点坐标信息、保存顶 点法线信息、保存顶点颜色信息和保存贴图坐标信息。 VertexArray 类的构造函数如下 :VertexArray(int numVertices,int numComponents,int componentSize)其中 ,numVertices 表示包含对象的数量 ,numComponents 表示每个对象包含的子元素数目 ,componentSize 表示每个子 元素所占的字节数。另外

8、该类还有一个比较常用的方法 set(int index,int length,short array0), 这个方法是用来向该类的实例对象中存 放数据的 ,第一个参数是指从第几个元素开始,第二个参数是指要设置多少个 ,第三个参数是实际设置的值。VertexBuffer 类才是真正保存多边形的框架信息的类。 该 类通过设置顶点信息、外观、贴图信息来建立图形。其中 setPositions(VertexBuffer v,float s,float b) 方法是用来设置顶 点位置的 ,第一个是顶点的坐标信息,后两个是用来做坐标偏移等操作的。坐标偏移的数学公式为:v '=v*s+b 。在 JS

9、R184 中,多边形是通过三角面来表示的 , 并且可以使 用背面削隐算法。 这样一来顶点就不再是任意定义的了 ,而是 有顺序的。比如图 2 中矩形格网的四个三角面的索引如下 :int index=new int0,3,4,0,4,2,0,2,1,0,1,3;Int length=new int3,3,3,3;TriangleStripArray triangle=new TriangleStripArray(index,length);设置 3D 对象顶点信息的代码片段如下 : /顶点位置Short verts=new short0,0,0,-5,-5,30,5,-5,30,-5,5,30,5

10、,5,30 ;/顶点索引int index=new int0,3,4,0,4,2, 0,2,1,0,1,3 ;int length=new int3,3,3,3;/保存顶点位置VertexArray vertexArray=newVertexArray(verts.length/3,3,2); vertexArray.set(0,verts.length/3,verts);/设置三角面TriangleStripArray triangle=new TriangleStripArray(index,length);VertexBuffer verBuffer=new VertexBuffer()

11、; verBuffer.setPositions(vertexArray,1f/100f,null);/生成矩形Mesh arrow=new Mesh(verBuffer,triangle,null);3.2 渲染模型模型建立后 ,最终的目标是为了渲染到屏幕上 ,渲染的操 作需要用到 Graphics3D 和 Camera 类。Camera 继承自 Transformable 类 ,有位移、旋转等信息 可以把它理解为虚拟场景中的眼睛。 Camera 类有两种观察场 景的方法 :透视法和平视法 ,常用的是透视法。透视法属性通过方法 setPerspective(float fivy,float

12、aspectRatio,float near,floatfar)设置,第一个参数为透视角度,第二个参数是视图的长宽比例,后两个参数是前后裁减面。代码片段如下 :Camera camera=newCamera();Float aspectRatio=(float)getWidth()/(float)getHeight(); Camera. setPerspective(45.0f, aspectRatio,1.0f,1000.0f); Transform cameraTransform=new Transform(); cameraTransform.postTranslate(0.0f,0.0

13、f,10.0f);Graphics3D 类是按照单模式设计的 ,因此在程序运行过 程中只能存在一个 Graphics3D 的实例。使用 Graphics3D 很 简单,绘制3D任务由paint()方法来完成。首先是获得Graphics3D的实例并绑定到目标对象上,然后调用clear()方法 来清空屏幕,随后调用render()方法来绘制3D对象。绘制完毕 后,调用releaseTarget()方法来释放 Graphics对象。部分代码 如下:public class Mycanvas extends Canvas/单例模式 ,程序中只存在一个 Graphics3D 引用 Graphics3D

14、myG3D=Graphics3D.getInstance();Public void paint(Graphics g) myG3D.bindTarget(g);/更新场景Graphics3D.clear(null);/渲染场景Graphics3D.render(verBuffer, triangle,new Appearance(),null);/释放目标对象myG3D.releaseTarget();3.3 光照和纹理映射 为了更好地实现三维可视化效果,可以加入光照和纹理影射。JSR184中有四个不同的光线选项:Ambient(环境光)、 Directional(平行光)、Omnidire

15、ctional(点光)、Spot(锥光),并通 过 Light.setMode(int mode) 方法来设置光源的类 型,setColor(int RGB)设置光源颜色。JSR1 84中纹理一般作为一个资源文件放在 Midlet Suite 包中,可以通过Loader对象的load()方法想将纹理图像读入一 个 Image2D 对象中 ,然后利用 Image2D 对象来创建一个纹理 对象。4 结论JSR184的出现,使得在移动终端上实现三维功能成为可 能。作为一个厂商可选包 ,JSR184 的主要目的是为 J2ME 平 台构架一个运行在资源受限的移动设备上的接口。 JSR184 的标准正在不断完善 ,目前已经广泛应用到 3D 游戏、空间信 息三维可视化等领域。参考文献 :1 詹建飞 .J2ME 开发精解

温馨提示

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

评论

0/150

提交评论