`

J2ME 3D编程——第一个3D程序(附源代码)

阅读更多

J2ME 3D编程——第一个3D程序(附源代码)

更多文章请访问:http://blog.csdn.net/mailbomb

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。

关于3D编程的资料,可以查阅我的blog

关于代码的编译和运行说明如下:

1、 以下代码在J2ME WTK2.2下面编译通过。

2、 代码分为两个文件:First3DCanvas.javaFirst3DMIDlet.java

3、 使用J2ME WTK2.2建立新的工程,主MIDlet类为:first3d. First3DMIDlet

4、 将代码保存在你的工程目录下的first3d目录下。

5、 J2ME WTK安装目录下的

apps\Demo3D\res\com\superscape\m3g\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){}

}

}

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    第1章 嵌入式系统基础. 1.1 嵌入式系统简介 1.1.1 嵌入式系统定义 1.1.2 嵌入式系统与PC 1.1.3 嵌入式系统的特点 1.2 嵌入式系统的发展 1.2.1 嵌入式系统现状 1.2.2 嵌入式系统发展趋势 1.3 嵌入式操作系统...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

Global site tag (gtag.js) - Google Analytics