J2ME 3D编程——第一个3D程序(附源代码)
2005-01-14 09:49
471 查看
J2ME 3D编程——第一个3D程序(附源代码)
更多文章请访问:http://blog.csdn.net/mailbomb
参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
关于3D编程的资料,可以查阅我的blog。
关于代码的编译和运行说明如下:
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/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){}
}
}
更多文章请访问:http://blog.csdn.net/mailbomb
参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
关于3D编程的资料,可以查阅我的blog。
关于代码的编译和运行说明如下:
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/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){}
}
}
相关文章推荐
- j2me手机游戏编程第一课(开发环境搭建和第一个MIDlet程序 视频)
- J2ME程序开发全方位基础讲解汇总--J2ME 3D编程的一些资料
- [Axiom3D]第一个Axiom3D程序
- 我的j2me环境配置与第一个程序的建立
- Windows编程(1)-第一个程序
- 我的第一个j2me程序
- 我的第一个J2ME程序--Hello! J2ME
- 第一个j2me程序
- 3D球体一个(纪念第一个opengl程序~~)
- GPU 编程入门到精通(三)之 第一个 GPU 程序
- 在J2ME程序加入暂停功能——附实现源代码
- Linux下C++的编程——开发环境搭建与第一个程序
- CUDA入门(二)cuda编程的基本知识与第一个cuda程序
- Spring flex 搭建服务 之 编程环境配置和我的第一个程序(第二章,第一节)
- Linux编程 - 第一个Hello World的C程序
- 编程第一课 第一个程序
- unix 网路编程(卷一)第一个程序编译过程
- 教女友学编程-3-第一个程序不是HelloWorld
- 我的第一个J2ME程序
- Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序