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手机游戏开发详解 完整版 分为3部分
J2ME的3D开发教程
j2me 3D CS demo
J2ME3D手机游戏开发详解(随书源码),移动开发系列丛书,
J2ME 3D手机游戏开发详解 完整版 分为3部分
通过J2ME开发支持3D效果的客户端应用技术的入门介绍
本教程是关于J2ME 3D技术的文章。读者最好有一定的JAVA基础,特别是J2ME基础,对MIDLET和CANVAS有详细的认识,如果有3D基础更加。
J2ME 3D javax.microedition.m3g 帮助文档 HTML J2ME 3D javax.microedition.m3g 帮助文档 HTML J2ME 3D javax.microedition.m3g 帮助文档 HTML
j2me 3d 源程序,一个显示和旋转3维模型的手机源程序
J2ME 3D魔方游戏,ecplise完整工程。代码完成的有点急了,仅供参考。感觉某些地方还是解决的比较经典的,碰巧想到了好方法
J2ME 3D 游戏 黑暗之门的代码 3D入门必看
j2me3D游戏开发api ,jsr184
j2me 3d api 中文版,像原来官方的api一样,翻译得很接近,例子代码还是高亮的。
j2me开发的坦克3d源代码开发工具eclipse 3.1,提供给爱好j2me的朋友
对初学者有好处 里面有代码和书籍 都是中文的
j2me开发3d游戏样例和程序代码,包含整个eclipse工程文件。非常值得一看
J2ME做的3d俄罗斯方块,比较经典,特别是3d条件下新增加的上旋下旋左转右转的操作~
通过对手机游戏开发,MIDP 2.0,以及JSR-184(J2ME 3D技术)的研究,采用立即模式,运用深度优先遍历算法来随机生成游戏地图,并尽力模拟手机游戏的普遍性形式,实现一个操作简单,并有一定可玩性的完整3D手机迷宫...
J2ME 3D手机游戏开发详解 完整版 分为3部分
用J2ME与ASP建立数据库连接 J2ME是利用HttpConnection建立HTTP连接,然后获取数据,ASP也是利用HTTP协议,因而可以利用J2ME与ASP建立连接,从而访问数据库。