剖析J2ME 3D编程的第一个3D程序

开发 前端
你对J2ME 3D编程是否了解,这里和大家分享一下J2ME 3D编程的第一个3D程序,最常用的3D API有OpenGL和Microsoft的Direct3D,在桌面游戏中早已广泛应用。

本文和大家重点讨论一下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程序源代码如下: 

  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. 术语汇编 J2ME 3D技术简介
  2. 深入了解J2ME Polish+Eclipse配置过程
  3. 探究J2ME中cookie库的管理
  4. Eclipse中进行JVM内存设置
  5. 解析Linux下如何用eclipse搭建J2ME开发环境

 

责任编辑:佚名 来源: blog.csdn.net
相关推荐

2010-10-09 15:52:28

J2ME3D技术

2010-09-30 10:25:40

J2ME3D

2022-09-14 09:23:51

Java3D引擎

2011-09-22 10:07:52

奥图码投影仪

2012-11-26 12:51:44

木材3D打

2011-10-06 13:30:45

宏碁投影仪

2011-05-03 11:07:46

2D3D丽讯

2020-08-26 10:37:21

阿里3D

2011-05-26 10:05:07

优派投影机

2023-05-03 09:01:41

CanvasWebGL

2024-05-16 09:24:17

3D技术

2011-05-26 10:55:39

2011-05-25 16:07:17

2011-08-26 14:50:23

2011-04-26 14:21:20

3DJVC投影机

2015-09-09 11:05:52

3d视差引导页

2021-12-28 10:52:10

鸿蒙HarmonyOS应用

2012-08-13 17:11:37

Silverlight

2023-03-03 21:42:18

鸿蒙

2011-06-15 13:08:59

点赞
收藏

51CTO技术栈公众号