JSR184 M3G(Mobile 3D GraphicsTM)是针对移动3D应用的一个简明3D API接口集,Motorola E680/E680i/A780支持这个集合。M3G仅仅是一个高级的java接口,在E680/E680i/A780中底层的实现是由SuperScape开发的Swerve 3D引擎完成,它是一个针对Arm/XScale处理器的高性能3D引擎。
下面是一些提升J2ME 3D游戏性能的技术技巧。记住,游戏玩家关心的是游戏的最终效果,而不是如何实现效果。
M3G中的基本概念
在M3G中,Graphics3D渲染界面,World是整个3D场景,而Camera是视点。3D对象按照树形结构组织,并且通过点、多边形和网面定义。变换如移动、旋转和等比缩放通过矩阵相乘实现。
技术技巧
限制多边形总量
对于Motorola E680/E680i/A780,强烈建议一个3D场景(包括人物、物体和环境)中的多边形总量必须不能超过1500。
混合2D和3D对象
在J2ME 3D游戏中,2D对象消耗的资源远比3D对象少得多,然而有时效果看起来却很相似。那么在游戏中使用2D片段代替一些3D对象就是一个很好的主意了。例如,乌云、雪花或者广告牌可以很容易地转化为2d图像。有时,在背景图上直接绘图也同样能够减少资源消耗。
使用纹理模拟动画
在3D游戏中,有一些小对象需要相对复杂的动画以使它们显示更具现实性。例如,为了描绘汽车在小屏幕游戏中奔跑,你需要一些动画效果来使玩家知道汽车是在实际的奔跑。但是全部使用真实的3D模型来模拟这个动作是不必要的,也是不切实际的。一个可用的方式就是改变对象的纹理,使其看起来像在奔跑。
把大网面分成几部分
在E680/E680i/A780种使用的swerve引擎支持几何剔除(或者网面剔除)。例如,在视口中的立方体有些不可见的面可以被忽略。但是一个网面只有全部不可见时才能被忽略。
更确切地说,如果你有一个网面覆盖了无限的区域(例如,道路)并且作为一个网面对象导出,如果把这个网面划分为一些子网面将会得到更好的性能,因为在视口中只需要计算和渲染子网面。
但是在把对象划分为多个部分中要找到一个平衡点。越多的部分,就需要越多的处理,因为场景树更大了。划分的部分越少,大对象就只有部分可见,就不能被剔除。找到平衡点需要不断的试验。
使用哈希表替换数学函数
E680/E680I/A780使用XScale 300MHz作为它们的处理器。事实上,像大多数移动电话中的CPU一样,E680/E680I/A780中的CPU没有浮点处理器,也就是说这个CPU不得不使用整数来模拟浮点,这会花费大量的时间。
函数如除、sin、cos和求平方根将会占据大量的计算资源。在移动3D游戏中,函数的精度要求是很低的 。使用哈希表(函数变量作为键(key),函数结果作为值(value))代替真正的函数将会提升浮点运算的性能。
键(Key)
|
值(Value)
|
Sin(0)
|
0
|
Sin(5π/180)
|
0.087155743
|
Sin(10π/180)
|
0.173648178
|
Sin(15π/180)
|
0.258819045
|
…
|
…
|
表1:哈希表模拟sin
使用自发光的纹理代替光源
图1 材料和顶点色彩管道——JSR 184文档中的图片
如图所示,发光计算是在材料之上的。光——甚至方向光——要使用很多资源。如果对象是被照亮的,可以考虑代替创建你的纹理。
注意
在移动电话中,内存和计算资源都是有限的,因此一个好的J2ME 3D游戏的关键就是得到场景、效果和性能之间的平衡点。要得到这个平衡点,在实际的手机上进行不断地进行试验一直都是很有必要的。
分享到:
相关推荐
- **双API支持**:书中不仅涵盖了OpenGL ES还深入介绍了M3G,这是当前移动设备上最流行的两种3D图形API。 - **实际操作性强**:读者可以通过实际编程练习来掌握所学知识,提高解决问题的能力。 #### 三、核心知识点...
1. **开放式体系架构**:HNC-18xp/M3,T3采用先进开放式体系结构,集成了嵌入式工业PC机和高性能32位中央处理器,支持大容量电子盘存储,兼容CF卡、USB等程序交换方式,适用于数控车床、铣床和简易加工中心的控制。...
为了提升游戏性能,开发者需要理解并掌握事件驱动编程和线程管理。在J2ME中,游戏循环通常在一个单独的线程中运行,以保持流畅的游戏体验。同时,内存管理和优化也是关键,因为早期的移动设备资源有限。 书中还可能...
2. **3D图形库**:在J2ME中实现3D效果,通常需要使用第三方库,如JOGL (Java OpenGL) 或者M3G (Mobile 3D Graphics API),尽管M3G是J2ME的一部分,但在实际开发中可能需要对底层进行优化和扩展。 3. **游戏引擎**:...
开发者可以通过第三方库如LWUIT或M3G扩展图形能力。音频方面,可使用MIDP的Sound和Player类播放音频文件。 10. **性能优化** J2ME设备的资源有限,因此游戏代码需要优化以提高运行效率。减少对象创建、合理使用...
4. 网络通信:如果游戏支持多人对战,可能需要使用J2ME的无线通信API,如WMA(Wireless Messaging API)或JSR 118(M3G API)进行数据交换。 三、游戏开发流程 1. 设计游戏规则:明确游戏的目标、胜利条件、玩家...
M3G(Mobile 3D Graphics)格式是为移动设备量身定制的,考虑到手机和嵌入式设备的性能限制,M3G提供了轻量级的3D图形表示方案。它支持基本的3D几何、纹理映射、光照、动画以及视图控制等特性,确保在低功耗设备上也...
3. **Game API**:J2ME提供了一些专为游戏设计的API,如WMA(Wireless Messaging API)和M3G(Mobile 3D Graphics API)。这些API可以帮助开发者创建动画、处理事件、播放声音以及实现3D图形。 4. **事件处理**:在...
STM32F103RCT6是一款由意法半导体(STMicroelectronics...此外,还可以深入研究PCB设计的技巧,如信号完整性、电源完整性、EMC/EMI考虑、热设计等方面的知识,这对于提升电子产品的设计能力和解决问题的能力大有裨益。
开发者还需要了解如何配置工程、设置中断、调试技巧等,才能充分发挥GD32F130G8U6的性能。 总之,兆易创新GD32130G-START开发板的PDF原理图和固件库源码是开发者学习和开发的宝贵资源。通过深入研究这些资料,...
这两部分是设备维修和升级过程中不可或缺的环节,其正确实施对于设备性能的提升和用户使用体验至关重要。 关于**产品专用作业台的安装**,维修手册中指出施乐C7780G型号提供两种不同类型的作业台,分别是Table ...
例如,Cortex-M3、Cortex-M4和Cortex-M7内核在性能和功能上的差异。讲解内容可能涉及STM32的GPIO(通用输入/输出)、中断系统、定时器、串口通信、ADC(模拟数字转换器)和DMA(直接内存访问)等常用外设的使用。 ...
STM32 F1系列是基于Cortex-M3内核的,它在性能和功耗上相对于F0有所提升,适合中等复杂度的嵌入式应用。F1系列拥有更强大的计算能力和更多的内存选项,包括增强型和基本型两个子系列,以满足不同级别的性能需求。其...
标题中的“32原理图加pcb”指的是基于STM32微控制器的电路设计,包括了原理图(Schematic)...通过分析和理解这些设计,可以深入学习STM32的工作原理,掌握电路设计和PCB布局的基本技巧,从而提升自己的硬件开发能力。
STM32F103ZET是一款由STMicroelectronics(意法半导体)生产的高性能ARM Cortex-M3微控制器。它属于STM32系列中的一员,具有广泛的用途和强大的处理能力,特别是在嵌入式应用中表现突出。该微控制器系列广泛应用于...
- **Cortex-M内核**:理解ARM Cortex-M系列的特点,如M0、M3、M4、M7等不同内核的性能差异,以及它们的寻址方式、异常处理机制等。 - **STM32架构**:熟悉STM32的不同系列(如F0、F1、F2、F3、F4、L0、L1等),以及...
【mt7681开发分享.pdf】可能是更深入的MT7681开发教程或者案例分享,可能包含更多关于驱动开发、固件升级、API使用等方面的实践经验和技巧,帮助开发者更好地利用MT7681的全部潜力。 总之,HLK-M35和MT7681是物联网...
STM32F103VET6是一款基于ARM Cortex-M3内核的微控制器,由意法半导体(STMicroelectronics)生产。这款芯片在嵌入式系统设计中广泛应用,尤其在物联网、工业控制以及消费电子等领域。在这个实验中,我们将会讨论如何...
1. **STM32微控制器**:STM32家族基于ARM Cortex-M内核,包括M0、M3、M4、M7等多个型号,具有丰富的外设接口和高性能计算能力。在本项目中,可能使用的是支持SPI或I2C通信协议的型号,如STM32F103C8T6。 2. **OLED...
7. **应用笔记**:这些笔记通常包含实际应用中的经验和技巧,可能是关于如何优化驱动性能,解决兼容性问题,或者提升显示效果的建议。 8. **芯片手册**:芯片手册是理解HX8353功能和操作的官方文档,包括引脚定义、...