剖析J2ME 3D編程的第一個(gè)3D程序
本文和大家重點(diǎn)討論一下J2ME 3D編程——***個(gè)3D程序,參考WTK2.2提供的demo,完成了***個(gè)3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學(xué)習(xí)J2ME 3D編程的朋友一起學(xué)習(xí)。
J2ME 3D編程——***個(gè)3D程序
參考WTK2.2提供的demo,完成了***個(gè)3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學(xué)習(xí)J2ME 3D編程的朋友一起學(xué)習(xí)。
關(guān)于代碼的編譯和運(yùn)行說明如下:
1、以下代碼在J2MEWTK2.2下面編譯通過。
2、代碼分為兩個(gè)文件: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文件復(fù)制到你的工程目錄下的res目錄下。
6、你的工程建立后,設(shè)置工程,通過WTK界面中的“設(shè)置”按鈕打開設(shè)置窗口,在“API選擇”中,設(shè)置“目標(biāo)平臺”為:自定義;“簡檔”為“MIDP2.0”;“配置”為“CLDC1.1”;選中“Mobile3DGraphicsforJ2ME(JSR184)”。
7、這樣你就可以編譯和運(yùn)行以下代碼了。#p#
J2ME 3D編程的***個(gè)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.*;
 - /**
 - ****個(gè)3D程序
 - */
 - publicclassFirst3DCanvas
 - extendsCanvas
 - implementsRunnable{
 - /**World對象*/
 - privateWorldmyWorld=null;
 - /**Graphics3D對象*/
 - privateGraphics3Dg3d=Graphics3D.getInstance();
 - /**Camera對象*/
 - privateCameracam=null;
 - privateintviewport_x;
 - privateintviewport_y;
 - privateintviewport_width;
 - privateintviewport_height;
 - privatelongworldStartTime=0;
 - //重繪時(shí)間
 - privateintvalidity=0;
 - publicFirst3DCanvas(){
 - //啟動(dòng)重繪界面的線程
 - Threadthread=newThread(this);
 - thread.start();
 - try{
 - //導(dǎo)入3D圖片
 - myWorld=(World)Loader.load("/swerve.m3g")[0];
 - viewport_x=0;
 - viewport_y=0;
 - viewport_width=getWidth();
 - viewport_height=getHeight();
 - cam=myWorld.getActiveCamera();
 - //設(shè)置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){}
 - }
 - }
 
【編輯推薦】
- 術(shù)語匯編 J2ME 3D技術(shù)簡介
 - 深入了解J2ME Polish+Eclipse配置過程
 - 探究J2ME中cookie庫的管理
 - Eclipse中進(jìn)行JVM內(nèi)存設(shè)置
 - 解析Linux下如何用eclipse搭建J2ME開發(fā)環(huán)境
 















 
 
 







 
 
 
 