9 


使用 Mobile Graphics

本章简要概述了如何使用图形内容。Sun JavaTM Wireless Toolkit for CLDC 提供了三种 API,它们为交互式 2D 和 3D 图形提供了全面的功能。


9.1 使用 Mobile 3D Graphics API

JSR 184 是定义 Mobile 3D Graphics (Mobile 3D Graphics, M3G) API for J2ME 的规范。此 API 在一个适用于 CLDC/MIDP 设备的压缩包中提供了 3D 功能,并提供两种显示 3D 图形内容的方法。立刻模式 API 使应用程序可以直接创建和操纵 3D 元素。该 API 的顶层是一个场景图形 API,也称保留模式,此模式可以装入并显示事先设计的完整 3D 场景。应用程序可以随意使用最合适的方法,也可以随意使用保留模式和立刻模式 API 的组合。JSR 184 规范还为场景图形定义了一种文件格式 (.m3g)。

有关更多信息,请通过以下网址查询 JSR 184 规范:
http://jcp.org/en/jsr/detail?id=184

JSR 184 提供了一个面向 CLDC/MIDP 设备的标准 API,支持新一代 3D 应用程序。而立刻模式 API 可以与 OpenGL ES 兼容,OpenGL ES 是面向 3D 图形的一个标准轻量级 API。有关 OpenGL ES 的更多信息,请参见 http://khronos.org/

9.1.1 立刻模式

立刻模式适用于在算法上生成 3D 图形内容的应用程序,如科学视觉呈现或统计图。该应用程序可以直接创建并操纵 3D 对象。

有关立刻模式的示例,请参见 Demo3D 示例应用程序中的 Life3D MIDlet。

9.1.2 保留模式

大多数应用程序(尤其是游戏)会使用保留模式或场景图形 API。在这种情况下,图形设计师或美工会使用 3D 建模软件创建场景图形。场景图形以 JSR 184 文件格式保存。场景图形文件与应用程序捆绑在一起。在运行时,应用程序使用场景图形 API 来装入和显示文件。

应用程序可操纵已装入场景图形的某些部分,以创建角色动画或其他效果。基本策略就是尽可能多使用建模软件。在运行时,应用程序可抓取并操纵场景图形的某些部分,其中也可以包括动画或其他效果的路径。

有关保留模式的示例,请参见 Demo3D 示例应用程序中的 retainedmode MIDlet。

9.1.3 以质量博取速度

MIDP 开发面临的挑战之一就是一般设备的环境限制。与台式机相比,MIDP 设备处理器的处理速度较慢,内存也较小。这些问题同样也影响到 3D 图形处理区域。为了适合大部分实现,JSR 184 规范提供了各种机制以尽可能高效地显示 3D 场景。

一种方法就是范围界定,通过这种技术,您可以告诉 3D 图形实现何时对象之间将不发生交互。例如,如果您定义了一个房间场景图形,您可以使用范围界定,指定地下室的光线并不影响一层起居室的外观。通过减少显示场景所需的运算量,范围界定使实现工作变得更加简单。

但是一般来说,提高 3D 场景渲染速度的最好办法是在质量上做出一些让步。Mobile 3D Graphics API 包含渲染提示,应用程序可以提示实现如何在质量上做出让步以提高渲染速度。

9.1.4 创建 Mobile 3D 图形内容

大多数 Mobile 3D 应用程序使用资源文件中的场景图形来描述对象、场景和角色。场景图形通常并不是由编程人员来创建,而是由图形设计师或美工使用标准 3D 建模工具来创建。

有些供应商提供了用于创作内容以及将文件转换为 JSR 184 格式的工具。Superscape (http://superscape.com/) 就是这样一家供应商。

由于使用立刻模式 API 在应用程序中创建和操纵 3D 图形内容相对比较困难,因此大多数应用程序都更多地依赖某个场景图形文件。如果在设计过程中尽可能使用场景图形文件,在运行时应用程序的工作就简单多了。


9.2 渲染可伸缩矢量图形内容

可伸缩矢量图形 (Scalable Vector Graphics, SVG) 是由万维网联盟定义的标准。它是用于描述丰富的交互式 2D 图形的 XML 语法。

Sun JavaTM Wireless Toolkit for CLDC 仿真器支持 Scalable 2D Vector Graphics API for J2ME (JSR 226)。JSR 226 是用于装入、操纵、渲染和播放 SVG 内容的 Java ME API。SVG Tiny 是简洁而强大的 XML 格式,用于描述丰富的交互式动画 2D 内容。

当可以使用文本编辑器生成 SVG 内容时,大多数用户更愿意使用创作工具。有以下三种可能性:

使用 SVG 内容的 Java ME 应用程序可以创建适合用户显示器的显示分辨率和波形因数的图形效果。

可以通过两种方式以动画显示 SVG 图像。一种是使用陈述性动画。另一种是通过 API 调用重复地修改 SVG 图像参数(例如颜色或位置)。第 A.21.3 节“播放 SVG 动画”说明了此陈述性动画。


9.3 OpenGL® ES 概述

JSR 239 定义用于两个 API(OpenGL® for Embedded Systems [OpenGL® ES] 和 EGL)的 Java 编程语言绑定。OpenGL® ES 是用于 3D 图形的标准 API,是 OpenGL® 的子集,可以在台式机上普及。EGL 是标准平台接口层。OpenGL® ES 和 EGL 均由 Khronos Group (http://khronos.org/opengles/) 开发。

OpenGL® 是适用于访问硬件加速 3D 图形的低级别图形库,而 JSR 184(它是面向对象的)要求高级别功能。需要开发 OpenGLESDemo 样例项目代码。