本文和大家重点讨论一下J2ME 3D编程——***个3D程序,参考WTK2.2提供的demo,完成了***个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
J2ME 3D编程——***个3D程序
参考WTK2.2提供的demo,完成了***个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
关于代码的编译和运行说明如下:
1、以下代码在J2MEWTK2.2下面编译通过。
2、代码分为两个文件:First3DCanvas.java和First3DMIDlet.java。
3、使用J2MEWTK2.2建立新的工程,主MIDlet类为:first3d.First3DMIDlet
4、将代码保存在你的工程目录下的first3d目录下。
5、将J2MEWTK安装目录下的
apps\Demo3D\res\com\superscape\m3g\wtksamples\retainedmode\content目录中的swerve.m3g文件复制到你的工程目录下的res目录下。
6、你的工程建立后,设置工程,通过WTK界面中的“设置”按钮打开设置窗口,在“API选择”中,设置“目标平台”为:自定义;“简档”为“MIDP2.0”;“配置”为“CLDC1.1”;选中“Mobile3DGraphicsforJ2ME(JSR184)”。
7、这样你就可以编译和运行以下代码了。#p#
J2ME 3D编程的***个3D程序源代码如下:
- //First3DMIDlet.java
- packagefirst3d;
- importjavax.microedition.midlet.*;
- importjavax.microedition.lcdui.*;
- publicclassFirst3DMIDletextendsMIDlet{
- privateFirst3DCanvasdisplayable=newFirst3DCanvas();
- publicvoidstartApp(){
- Display.getDisplay(this).setCurrent(displayable);
- }
- publicvoidpauseApp(){}
- publicvoiddestroyApp(booleanunconditional){}
- }
- //First3Dcanvas.java
- packagefirst3d;
- importjavax.microedition.lcdui.*;
- importjavax.microedition.m3g.*;
- importjava.util.*;
- /**
- ****个3D程序
- */
- publicclassFirst3DCanvas
- extendsCanvas
- implementsRunnable{
- /**World对象*/
- privateWorldmyWorld=null;
- /**Graphics3D对象*/
- privateGraphics3Dg3d=Graphics3D.getInstance();
- /**Camera对象*/
- privateCameracam=null;
- privateintviewport_x;
- privateintviewport_y;
- privateintviewport_width;
- privateintviewport_height;
- privatelongworldStartTime=0;
- //重绘时间
- privateintvalidity=0;
- publicFirst3DCanvas(){
- //启动重绘界面的线程
- Threadthread=newThread(this);
- thread.start();
- try{
- //导入3D图片
- myWorld=(World)Loader.load("/swerve.m3g")[0];
- viewport_x=0;
- viewport_y=0;
- viewport_width=getWidth();
- viewport_height=getHeight();
- cam=myWorld.getActiveCamera();
- //设置cam对象
- float[]params=newfloat[4];
- inttype=cam.getProjection(params);
- if(type!=Camera.GENERIC){
- //calculatewindowaspectratio
- floatwaspect=viewport_width/viewport_height;
- if(waspect<params[1]){
- floatheight=viewport_width/params[1];
- viewport_height=(int)height;
- viewport_y=(getHeight()-viewport_height)/2;
- }
- else{
- floatwidth=viewport_height*params[1];
- viewport_width=(int)width;
- viewport_x=(getWidth()-viewport_width)/2;
- }
- }
- worldStartTime=System.currentTimeMillis();
- }
- catch(Exceptione){}
- }
- protectedvoidpaint(Graphicsg){
- //清除背景
- g.setColor(0x00);
- g.fillRect(0,0,getWidth(),getHeight());
- //和3D对象绑定
- g3d.bindTarget(g);
- g3d.setViewport(viewport_x,viewport_y,
- viewport_width,viewport_height);
- longstartTime=System.currentTimeMillis()-worldStartTime;
- validity=myWorld.animate((int)startTime);
- try{
- g3d.render(myWorld);
- }
- finally{
- g3d.releaseTarget();
- }
- }
- publicvoidrun(){
- try{
- while(true){
- //重绘图形
- repaint(viewport_x,viewport_y,
- viewport_width,viewport_height);
- }
- }catch(Exceptione){}
- }
- }
【编辑推荐】
- 术语汇编 J2ME 3D技术简介
- 深入了解J2ME Polish+Eclipse配置过程
- 探究J2ME中cookie库的管理
- Eclipse中进行JVM内存设置
- 解析Linux下如何用eclipse搭建J2ME开发环境