剖析J2ME 3D編程的第一個3D程序
本文和大家重點討論一下J2ME 3D編程——***個3D程序,參考WTK2.2提供的demo,完成了***個3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學(xué)習(xí)J2ME 3D編程的朋友一起學(xué)習(xí)。
J2ME 3D編程——***個3D程序
參考WTK2.2提供的demo,完成了***個3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學(xué)習(xí)J2ME 3D編程的朋友一起學(xué)習(xí)。
關(guān)于代碼的編譯和運行說明如下:
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文件復(fù)制到你的工程目錄下的res目錄下。
6、你的工程建立后,設(shè)置工程,通過WTK界面中的“設(shè)置”按鈕打開設(shè)置窗口,在“API選擇”中,設(shè)置“目標(biāo)平臺”為:自定義;“簡檔”為“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{
- //導(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)境