快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

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

时间:2011-02-10

参考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://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号