2.4 J2ME 3D 技术简介
3D 技术已经比较成熟了,在桌面游戏中已经广泛应用该技术,并开发出出色的 3D 游戏.但在小型设备中, 3D 游戏的发展并不令人满意,主要原因是小型设备的有限资源不能满足 3D 技术所需求的高速的处理器,大量和快速的内存访问,以及高质量低功耗的图形加速卡,为此,各大厂商都纷纷推出自己支持 3D 的硬件和软件开发工具包.
为方便开发人员进行 3D 技术开发, JSR-184 标准 M3G 提供了一套简单的 3D API ,目前大部分移动电话厂商和研发机构支持该标准.
2.4.1 M3G(JSR-184)
M3G 是J2ME 的一个可选包,以OpenGL 为基础的精简版一共有 30 各类,如图 2-2 所示,运行在 CLDC 1.1/MIDP 2.0 上(必须支持浮点数运算).
图2-2 M3G 的类示意图
M3G 只是一个 Java 接口,具体的底层 3D 引擎一般由 C 代码实现.这种全新的的设计使 3D 技术变得不再繁琐,并且可以加入到 J2ME 的整体架构,保证了 Java 3D 技术强大的扩展性.
下面简单介绍一下 M3G 开发包中的类:
类名描述AnimationController
控制动画序列位置、速度等因素.例如能够控制动画应用中灯光的闪光和移动
AnimationTrack
和动画特性中的 KeyframeSequence 关联,是一组使得动画系统能够直接刷新的变量
Appearance
一系列定义了网格( Mesh )或者精灵( Sprite3D )外观特性的对象
Background
定义了如何清空视角( Viewport ),在保留模式下,或者当显示一个世界( World )时Camera
一个定义了观察者位置和 3D 到2D 投影角度的场景节点.摄影机总是面对 z 轴的负半轴( 0 , 0 , -1 )
CompositingMode
外观 Appearance 的组成部分,封装了每个像素的颜色合成属性
Fog
外观 Appearance 的组成部分,封装了雾化的属性
Graphics3D
一个 singleton 类,它能够用来绑定要显示的内容,从而加以显示,所有关于 3D 图形的绘制都通过 render() 方法完成
Group
一个场景节点,以子节点的形式存储一系列无序节点
Image2D
2D 图形,可以被用来当作纹理、背景或者精灵图片
IndexBuffer
定义了如何为一个几何物体连接顶点
KeyframeSequence
封装了动画数据,例如时间戳和关键帧的顺序.这些顺序决定了特定时刻的动画质量,并且这些动画数据可以被多个活动物体共享
Light
一个场景节点,用来描绘不同的光源,和材质属性一起决定了物体的颜色
Loader
加载并读取经过串行化的场景节点,从而构成整个场景.从M3G 文件中读取 3D 数据是创建 3D 场景最方便的方式之一
Material
外观 Appearance 的组成部分,封装了用以计算光照效果的材质属性.其他涉及光照属性的类有 Light 、 PolygonMode 和VertexBuffer
Mesh
一个场景节点,描绘了一个用多边形构成的 3D 物体.它有 MorphingMesh 和SkinnedMesh 两个子类
MorphingMesh
一个场景节点, Mesh 类的子类,能够实现顶点的 Mesh 模型
Node
一个定义了所有场景类的抽象类.它有 5 种类型: Camera 、 Mesh 、 Sprite3D 、 Light 、 Group
Object3D
一个定义了能被包含在 World 中的 3D 对象的抽象基类,包含 World 本身、其他场景节点、动画类、材质类等.除了 Graphics3D 、 Loader 、 RayInterdiv 和Transform 类外都是 Object3D 的子类
PolygonMode
外观 Appearance 的组成部分,封装了前后面的选择、多边形的填充方式、灯光估计、透视校正和阴影
RayInterdiv
存储了一些关于网格 Mesh 和精灵 Sprite3D 的参考,以及一些关于交叉点的信息,无法从 M3G 档中加载
SkinnedMesh...
[1] [2] [3]
