首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 3D 學習筆記:M3G 簡易介面實作範例

     編輯:J2ME

完整可運行範例:載入 .m3g 場景並啟用鍵盤移動攝影機

專案結構:Test3DMIDlet (MIDlet) + M3GCanvas (Canvas)

MIDlet 類別

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Test3DMIDlet extends MIDlet {
    M3GCanvas m3g = new M3GCanvas();

    public void startApp() {
        Display.getDisplay(this).setCurrent(m3g);
    }
    public void pauseApp() {}
    public void destroyApp(boolean b) {}
}

Canvas 類別 (核心渲染邏輯)

import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;

public class M3GCanvas extends Canvas {
    private World world;
    private Graphics3D g3d;
    private Camera camera;

    public M3GCanvas() {
        try {
            // 1. 從 .m3g 檔載入場景
            Object3D[] obj = Loader.load("/res/pogoroo.m3g");
            // 2. 取得 World 物件
            for (int i = 0; i < obj.length; i++) {
                if (obj[i] instanceof World) {
                    world = (World) obj[i];
                    break;
                }
            }
            // 3. 取得 Graphics3D 單例
            g3d = Graphics3D.getInstance();
            // 4. 取得場景中的主動攝影機
            camera = world.getActiveCamera();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public void paint(Graphics g) {
        try {
            // 綁定渲染目標
            g3d.bindTarget(g);
            // 代理渲染整個世界
            g3d.render(world);
        } catch (Exception e) {
            // 忽略渲染錯誤
        } finally {
            // 釋放渲染目標 (必要)
            g3d.releaseTarget();
        }
    }

    public void keyPressed(int keyCode) {
        int action = getGameAction(keyCode);
        if (action == Canvas.UP) {
            // 移動攝影機 (Z 軸前進 0.2 單位)
            camera.setTranslation(0, 0, 0.2f);
        }
        repaint(); // 觸發重繪
    }
}

關鍵點說明

  1. Loader.load() 回傳 Object3D[],需遍歷找出 World 實例
  2. Graphics3D.bindTarget(g) / releaseTarget() 必須成對呼叫,否則記憶體洩漏
  3. g3d.render(world) 一行完成整個場景渲染 (保留模式)
  4. Camera.setTranslation() 直接修改攝影機位置,配合 repaint() 即時更新
  5. 資源檔 pogoroo.m3g 可從 WTK2.2\apps\Demo3D 取得

運行截圖

網站導航 網站導航

此範例展示 M3G 最核心用法:載入場景 → 綁定畫布 → 渲染 → 互動更新攝影機,適合作為 3D 專案起始樣板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved