程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 剖析J2ME 3D編程的第一個3D程序

剖析J2ME 3D編程的第一個3D程序

編輯:J2ME

本文和大家重點討論一下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、這樣你就可以編譯和運行以下代碼了。

J2ME 3D編程的第一個3D程序源代碼如下: 

  1. //First3DMIDlet.Java  
  2.  
  3. packagefirst3d;  
  4.  
  5. importJavax.microedition.midlet.*;  
  6.  
  7. importJavax.microedition.lcdui.*;  
  8.  
  9. publicclassFirst3DMIDletextendsMIDlet{  
  10.  
  11. privateFirst3DCanvasdisplayable=newFirst3DCanvas();  
  12.  
  13.  
  14. publicvoidstartApp(){  
  15.  
  16. Display.getDisplay(this).setCurrent(displayable);  
  17.  
  18. }  
  19.  
  20. publicvoidpauseApp(){}  
  21.  
  22. publicvoiddestroyApp(booleanunconditional){}  
  23.  
  24. }  
  25.  
  26. //First3Dcanvas.Java  
  27.  
  28. packagefirst3d;  
  29.  
  30. importJavax.microedition.lcdui.*;  
  31.  
  32. importJavax.microedition.m3g.*;  
  33.  
  34. importJava.util.*;  
  35.  
  36. /**  
  37.  
  38. *第一個3D程序  
  39.  
  40. */  
  41.  
  42. publicclassFirst3DCanvas  
  43.  
  44. extendsCanvas  
  45.  
  46. implementsRunnable{  
  47.  
  48. /**World對象*/  
  49.  
  50. privateWorldmyWorld=null;  
  51.  
  52. /**Graphics3D對象*/  
  53.  
  54. privateGraphics3Dg3d=Graphics3D.getInstance();  
  55.  
  56. /**Camera對象*/  
  57.  
  58. privateCameracam=null;  
  59.  
  60. privateintvIEwport_x;  
  61.  
  62. privateintvIEwport_y;  
  63.  
  64. privateintvIEwport_width;  
  65.  
  66. privateintvIEwport_height;  
  67.  
  68. privatelongworldStartTime=0;  
  69.  
  70. //重繪時間  
  71.  
  72. privateintvalidity=0;  
  73.  
  74. publicFirst3DCanvas(){  
  75.  
  76. //啟動重繪界面的線程  
  77.  
  78. Threadthread=newThread(this);  
  79.  
  80. thread.start();  
  81.  
  82. try{  
  83.  
  84. //導入3D圖片  
  85.  
  86. myWorld=(World)Loader.load("/swerve.m3g")[0];  
  87.  
  88. vIEwport_x=0;  
  89.  
  90. vIEwport_y=0;  
  91.  
  92. vIEwport_width=getWidth();  
  93.  
  94. vIEwport_height=getHeight();  
  95.  
  96. cam=myWorld.getActiveCamera();  
  97.  
  98. //設置cam對象  
  99.  
  100. float[]params=newfloat[4];  
  101.  
  102. inttype=cam.getProjection(params);  
  103.  
  104. if(type!=Camera.GENERIC){  
  105.  
  106. //calculatewindowASPectratio  
  107.  
  108. floatwASPect=vIEwport_width/vIEwport_height;  
  109.  
  110. if(wASPect<params[1]){  
  111.  
  112. floatheight=vIEwport_width/params[1];  
  113.  
  114. vIEwport_height=(int)height;  
  115.  
  116. vIEwport_y=(getHeight()-vIEwport_height)/2;  
  117.  
  118. }  
  119.  
  120. else{  
  121.  
  122. floatwidth=vIEwport_height*params[1];  
  123.  
  124. vIEwport_width=(int)width;  
  125.  
  126. vIEwport_x=(getWidth()-vIEwport_width)/2;  
  127.  
  128. }  
  129.  
  130. }  
  131.  
  132. worldStartTime=System.currentTimeMillis();  
  133.  
  134. }  
  135.  
  136. catch(Exceptione){}  
  137.  
  138. }  
  139.  
  140. protectedvoidpaint(Graphicsg){  
  141.  
  142. //清除背景  
  143.  
  144. g.setColor(0x00);  
  145.  
  146. g.fillRect(0,0,getWidth(),getHeight());  
  147.  
  148. //和3D對象綁定  
  149.  
  150. g3d.bindTarget(g);  
  151.  
  152. g3d.setViewport(viewport_x,vIEwport_y,
  153. viewport_width,vIEwport_height);  
  154.  
  155. longstartTime=System.currentTimeMillis()-worldStartTime;  
  156.  
  157. validity=myWorld.animate((int)startTime);  
  158.  
  159. try{  
  160.  
  161. g3d.render(myWorld);  
  162.  
  163. }  
  164.  
  165. finally{  
  166.  
  167. g3d.releaseTarget();  
  168.  
  169. }  
  170. }  
  171.  
  172. publicvoidrun(){  
  173.  
  174. try{  
  175.  
  176. while(true){  
  177.  
  178. //重繪圖形  
  179.  
  180. repaint(viewport_x,vIEwport_y,
  181. viewport_width,vIEwport_height);  
  182. }  
  183.  
  184. }catch(Exceptione){}  
  185. }  
  186. }  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved