`
mmdev
  • 浏览: 13219122 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

J2ME 3D技术简介

阅读更多

3D技术对我们来说已经非常熟悉了,最常用的3DAPI有OpenGL和Microsoft的Direct3D,在桌面游戏中早已广泛应用。对于J2ME程序而言,Mobile3DGraphicsAPI(JSR184)的出现,使得为手机应用程序添加3D功能成为可能。

JSR184标准(M3G:Mobile3DGraphics)为Java移动应用程序定义了一个简洁的3DAPI接口,J2ME程序可以非常方便地使用M3G来实现3D应用比如游戏等等。M3G被设计为非常轻量级的,整个API的完整实现不超过150kb。

M3G是J2ME的一个可选包,以OpenGL为基础的精简版,一共有30个类,运行在CLDC1.1/CLDC2.0上(必须支持浮点运算),可以在MIDP1.0和MIDP2.0中使用。目前,支持M3G的手机有Nokia6230/3650/7650/6600、SiemensS65/CX65/S55/M55、Sony-EricssonK700i/P800/P900、Moto220/T720等。M3G只是一个Java接口,具体的底层3D引擎一般由C代码实现,比如许多手机厂商的3D引擎采用的便是SuperScape公司的Swerve引擎,这是一个专门为移动设备设计的高性能3D引擎。

类似于Microsoft的D3D,M3G支持两种3D模式:立即模式(immediatemode)和保留模式(retainedmode)。在立即模式下,开发者必须手动渲染每一帧,从而获得较快的速度,但代码较繁琐;在保留模式下,开发者只需设置好关键帧,剩下的动画由M3G完成,代码较简单,但速度较慢。M3G也允许混合使用这两种模式。

3D模型可以在程序中创建,但是非常繁琐。因此,M3G提供一个Loader类,允许直接从一个单一的.m3g文件中读入全部3D场景。m3g文件可以通过3DStudioMax之类的软件创建。

如果熟悉OpenGL,那么M3G是非常容易理解的。在M3G中,Graphics3D是3D渲染的屏幕接口,World代表整个3D场景,包括Camera(用于设置观察者视角)、Light(灯光)、Background(背景)和树型结构的任意数量的3D物体。3D对象在计算机中用点(Point,Pixel)、线(Line,Polyline,Spline)、面(Mesh)来描述,具体存储和运算(如旋转、投影)都是矩阵运算和变换。

SUN的WTK2.2已经内置了M3G的实现包,如果安装了WTK2.2,就可以在模拟器上运行3DMIDP程序。可以参考WTK2.2的示例demo3d。

下面是一个最简单的M3G程序,来自Sony-Ericsson的示例代码,它创建一个旋转的金字塔,可以从此处下载完整代码并在WTK2.2中运行。

首先,我们要获得唯一的Graphics3D实例,用于渲染3D场景。Graphics3D是一个Singleton实现,可以在任何地方获得:

g3d=Graphics3D.getInstance();

然后,在Canvas中渲染:

publicclassMyCanvasextendsCanvas
{
publicvoidpaint(Graphicsg){
try{
g3d.bindTarget(g);
...updatethescene...
...renderthescene...
}finally{
g3d.releaseTarget();
}
}

接下来创建一个World并设置Camera:

world=newWorld();
camera=newCamera();
world.addChild(camera);
//Thewidthandheightofthecanvas.
floatw=getWidth();
floath=getHeight();
//Constructsaperspectiveprojectionmatrixandsetsthatasthecurrentprojectionmatrix.
camera.setPerspective(60.0f,w/h,0.1f,50f);
world.setActiveCamera(camera);

接着,在createPyramid()方法中创建一个Mesh,代表金字塔,并添加到World中:

privateMeshpyramidMesh;//thepyramidinthescene

pyramidMesh=createPyramid();//createourpyramid.
pyramidMesh.setTranslation(0.0f,0.0f,-3.0f);//movethepyramid3unitsintothescreen.
world.addChild(pyramidMesh);//addthepyramidtotheworld

最后,在一个线程中让金字塔绕Y轴旋转起来:

publicvoidrun(){
Graphicsg=getGraphics();
while(true){
//rotatethepyramid1degreearoundtheY-axis.
pyramidMesh.postRotate(3.0f,0.0f,1.0f,0.0f);
draw3D(g);
flushGraphics();
}
}

以上对M3G作了一个简单的介绍,如果需要更多资料,可以参考:

http://jcp.org/en/jsr/detail?id=184
http://www.opengl.org

点击下载源代码

分享到:
评论

相关推荐

    J2ME 3D手机开发  PDF

    - **J2ME 3D概述**:随着3D技术的发展,J2ME也支持了3D应用开发,特别是针对手机游戏。J2ME 3D通过提供一套API(如Mascot Capsule 3D)来支持3D图形渲染、动画等功能,从而使得开发者能够创建更为丰富和复杂的3D移动...

    j2me开发指南第一讲

    5. **j2me3D游戏开发简单教程** 尽管3D游戏在J2ME上具有挑战性,但这个教程可能会提供一些实用的技术和工具,如J3D库,以简化3D游戏的实现。开发者可能学习到如何创建3D场景、物体以及如何处理复杂的3D运算。 J2ME...

    一个开源的J2ME引擎

    【J2ME简介】 J2ME,全称为Java 2 Platform, Micro Edition,是Java平台的一个子集,主要用于开发和部署在移动设备、嵌入式设备上的应用程序。它为这些资源有限但需要强大计算能力的设备提供了丰富的功能,如手机、...

    LWUIT,j2me教程

    ### LWUIT,j2me教程 #### LWUIT简介 LWUIT(Light Weight User Interface Toolkit)是一个专为Java ME平台设计的轻量级用户界面工具包。它为开发者提供了丰富的功能,包括类似Swing的MVC(Model-View-Controller...

    收集自Sun官方的开源项目phoneME,J2ME游戏编程

    【phoneME简介】 phoneME是Sun Microsystems(现已被Oracle收购)官方推出的一个开源项目,旨在提供一个可扩展、高性能且跨平台的Java ME(J2ME)执行环境。它主要面向移动设备,尤其是那些对内存和处理器资源有限的...

    AdvancedMultimediaSupplements.rar_J2ME_Java_

    1. **J2ME简介** J2ME是Java平台的一个子集,设计用于资源有限的设备,如手机、智能电视和嵌入式系统。其核心组件包括配置(Configurations)、配置文件(Profiles)和可选包(Optional Packages),这些组合提供了...

    tengge py for s60编程教程

    3.《3D图形教程》 作者:┈┾夨憶D*.亼ぺ 共10节教程 4.《tengge Py补充教程》 作者:tengge 共14节教程 5.《tengge Py网络教程》 作者:tengge 共16节教程 6.《tengge Py对象教程》 作者:tengge 共14节教程 7....

    Android 游戏开源引擎

    - **简介**:jPCT是一款基于OpenGL技术的3D图形引擎,支持PC和Android平台。该引擎功能强大,提供了丰富的3D解决方案。 - **特点**: - **3D渲染能力**:支持复杂的3D场景渲染,适用于高级别的游戏开发。 - **跨...

    java的基础教程 基础教程

    Java 2 Platform(J2SE、J2EE、J2ME)是Java技术的三个不同版本,分别针对桌面应用、企业级应用和嵌入式设备。J2SE是标准版,适用于桌面和服务器应用程序;J2EE是企业版,主要用于构建分布式的企业级应用;J2ME是...

    JAVA上百实例源码以及开源项目源代码

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

Global site tag (gtag.js) - Google Analytics