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

J2ME 3D編程的一些資料

編輯:J2ME
隨著J2ME技術的發展,以及硬件速度的提升,3D游戲程序將慢慢的變成主流,最近想學習這一塊的編程,所以收集了一些資料,和大家一起分享:
  1、JSR184
  JSR184是Nokia公司起草的一個關於3D API的規范,下載地址為:
  http://www.forum.nokia.com/main/1,,1_0_10,00.Html#JSr184
  
  2、Nokia的3D編程資料
  http://www.forum.nokia.com/main/1,6566,21,00.Html
  
  3、3D引擎
  一個簡單的開放源代碼的3D游戲引擎
  http://www.J2ME.com.cn/Soft_Show.ASP?SoftID=19
  
  國內一個合作開發3D引擎的項目:
  http://gceclub.sun.com.cn/NASApp/sme/jive/thread.JSP?forum=11&thread=8593
  
  4、一款3D游戲產品
  http://games.sina.com.cn/newgames/2004/04/040217696.sHtml
  
  5、支持3D的開發工具
  當前一些高端的手機支持3D開發,支持3D開發的開發工具中,通用的有SUN的J2MEWTK2.2。專用的是廠商提高的支持JSR184的SDK。
  
 3D編程——第一個3D程序
  
  參考WTK2.2提供的demo,完成了第一個3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和願意學習J2ME 3D編程的朋友一起學習。
  
  關於代碼的編譯和運行說明如下:
  1、以下代碼在J2ME WTK2.2下面編譯通過。
  
  2、代碼分為兩個文件:First3DCanvas.java和First3DMIDlet.Java。
  
  3、使用J2ME WTK2.2建立新的工程,主MIDlet類為:first3d. First3DMIDlet
  
  4、將代碼保存在你的工程目錄下的first3d目錄下。
  
  5、將J2ME WTK安裝目錄下的aPPS\Demo3D\res\com\superscape\m 3g\wtksamples\retainedmode\content目錄中的swerve.m3g文件復制到你的工程目錄下的res目錄下。
  
  6、你的工程建立後,設置工程,通過WTK界面中的“設置”按鈕打開設置窗口,在“API選擇”中,設置“目標平台”為:自定義;“簡檔”為“MIDP2.0”;“配置”為“CLDC1.1”;選中“Mobile 3D Graphics for J2ME(JSR184)”。
  
  7、這樣你就可以編譯和運行以下代碼了。
  
  源代碼如下:
  // First3DMIDlet.Java
  
  package first3d;
  
  import Javax.microedition.midlet.*;
  
  import Javax.microedition.lcdui.*;
  
  public class First3DMIDlet extends MIDlet {
  
  private First3DCanvas displayable = new First3DCanvas();
  
  public void startApp() {
  
  Display.getDisplay(this).setCurrent(displayable);
  
  }
  
  public void pauseApp() {}
  
  public void destroyApp(boolean unconditional) {}
  
  }
  
  // First3Dcanvas.Java
  
  package first3d;
  
  import Javax.microedition.lcdui.*;
  
  import Javax.microedition.m3g.*;
  
  import Java.util.*;
  
  /**
  
  * 第一個3D程序
  
  */
  
  public class First3DCanvas
  
  extends Canvas
  
  implements Runnable {
  
  /**World對象*/
  
  private World myWorld = null;
  
  /**Graphics3D對象*/
  
  private Graphics3D g3d = Graphics3D.getInstance();
  
  /**Camera對象*/
  
  private Camera cam = null;
  
  private int vIEwport_x;
  
  private int vIEwport_y;
  
  private int vIEwport_width;
  
  private int vIEwport_height;
  
  private long worldStartTime = 0;
  
  //重繪時間
  
  private int validity = 0;
  
  public First3DCanvas() {
  
  //啟動重繪界面的線程
  
  Thread thread = new Thread(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 = new float[4];
  
  int type = cam.getProjection(params);
  
  if (type != Camera.GENERIC) {
  
  //calculate window ASPect ratio
  
  float wASPect = viewport_width / vIEwport_height;
  
  if (wASPect < params[1]) {
  
  float height = vIEwport_width / params[1];
  
  vIEwport_height = (int) height;
  
  viewport_y = (getHeight() - vIEwport_height) / 2;
  
  }
  
  else {
  
  float width = vIEwport_height * params[1];
  
  vIEwport_width = (int) width;
  
  viewport_x = (getWidth() - vIEwport_width) / 2;
  
  }
  
  }
  
  worldStartTime = System.currentTimeMillis();
  
  }
  
  catch (Exception e) {}
  
  }
  
  protected void paint(Graphics g) {
  
  //清除背景
  
  g.setColor(0x00);
  
  g.fillRect(0, 0, getWidth(), getHeight());
  
  //和3D對象綁定
  
  g3d.bindTarget(g);
  
  g3d.setViewport(viewport_x, viewport_y, viewport_width, vIEwport_height);
  
  long startTime = System.currentTimeMillis() - worldStartTime;
  
  validity = myWorld.animate((int)startTime);
  
  try {
  
  g3d.render(myWorld);
  
  }
  
  finally {
  
  g3d.releaseTarget();
  
  }
  
  }
  
  public void run() {
  
  try{
  
  while(true){
  
  //重繪圖形
  
  repaint(viewport_x, viewport_y, viewport_width, vIEwport_height);
  
  }
  
  }catch(Exception e){}
  
  }
  
  }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved