`
java2000.net
  • 浏览: 651497 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多

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

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

<!----><o:p> </o:p>

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

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

<o:p> </o:p>

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

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目录下。<o:p></o:p>

6、  你的工程建立后,设置工程,通过WTK界面中的“设置”按钮打开设置窗口,在“API选择”中,设置“目标平台”为:自定义;“简档”为“MIDP2.0”;“配置”为“CLDC1.1”;选中“Mobile 3D Graphics for J2ME(JSR184)”。

7、  这样你就可以编译和运行以下代码了。

<o:p> </o:p>

源代码如下:

// First3DMIDlet.java

package first3d;

<o:p> </o:p>

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

<o:p> </o:p>

public class First3DMIDlet extends MIDlet {

  private First3DCanvas displayable = new First3DCanvas();

<o:p> </o:p>

  public void startApp() {

    Display.getDisplay(this).setCurrent(displayable);

  }

<o:p> </o:p>

  public void pauseApp() {}

<o:p> </o:p>

  public void destroyApp(boolean unconditional) {}

}

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

// First3Dcanvas.java

package first3d;

<o:p> </o:p>

import javax.microedition.lcdui.*;

import javax.microedition.m3g.*;

import java.util.*;

<o:p> </o:p>

/**

 * 第一个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;

<o:p> </o:p>

<o:p> </o:p>

  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;

<o:p> </o:p>

        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) {}

  }

<o:p> </o:p>

  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();

    }

  }

<o:p> </o:p>

  public void run() {

    try{

           while(true){

                 //重绘图形

                 repaint(viewport_x, viewport_y, viewport_width, viewport_height);

           }

    }catch(Exception e){}

  }

}<o:p></o:p>

分享到:
评论

相关推荐

    我的第一个J2ME程序(计算器)

    【标题】"我的第一个J2ME程序(计算器)" 涉及到的知识点主要围绕Java Micro Edition (J2ME) 开发,特别是如何利用J2ME来创建一个基础的计算器应用。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如早期...

    j2me开发程序源代码

    这个压缩包“j2me开发程序源代码”包含了若干个与J2ME相关的源代码文件,对于想要学习或深入理解J2ME编程的人来说极具价值。下面,我们将详细探讨J2ME开发中的关键知识点,以及这些源代码可能涵盖的内容。 1. **...

    坦克大战程序源代码J2ME

    【坦克大战程序源代码J2ME】是一款基于Java Micro Edition(J2ME)平台开发的经典游戏——坦克大战的源代码实现。J2ME是Java的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,如早期的手机游戏。本项目...

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

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

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

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

    J2ME手机游戏 —打地鼠

    综上所述,J2ME手机游戏“打地鼠”涉及到的不仅是编程技术,还包括了游戏设计、用户体验、资源管理和性能优化等多个方面,对于想要学习移动游戏开发的人来说,这是一个很好的实践项目。通过分析和理解这款游戏的源码...

    接砖块游戏源代码

    本篇文章将深入探讨一个基于J2ME的简单游戏——接砖块游戏的源代码,通过分析其核心机制和编程技巧,帮助读者理解游戏开发的基本流程。 接砖块游戏,顾名思义,玩家需操控一个可移动的平台来接住下落的砖块,以获得...

    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的真实...

    J2ME手机游戏MIDP1.0游戏入门

    **J2ME手机游戏MIDP1.0游戏入门** ...通过学习这个教程,初学者将掌握MIDP1.0的基础知识,能够创建出自己的第一个手机游戏——五子棋。在这个过程中,他们将深化对J2ME的理解,为更复杂的移动应用开发打下坚实基础。

    day001 JAVA语法基础-JAVA环境搭建&amp;第一个java程序.doc

    要运行这个程序,首先需要使用`javac`编译器将源代码编译为字节码(`.class`文件),然后使用`java`命令执行编译后的字节码。这就是Java程序的基本生命周期:编译和运行。 【Java语言特性】 1. **面向对象**:Java...

    大天使之剑java源码-ArchAngel_J2ME:J2ME大天使游戏

    J2ME作为Java的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,包括手机、电视和游戏机等。此项目的源码开源,为开发者提供了深入理解游戏开发流程和技术细节的机会。 一、J2ME基础 J2ME是Sun ...

    java程序编程南昌大学

    `.java`文件是Java源代码文件,而`.class`文件是编译后的字节码文件。类是由`.java`文件定义的,并在编译后生成相应的`.class`文件。 ### 访问控制与封装 在Java中,`private`、`protected`、`public`和`default`...

    第二个JAVA ME程序----批量添加后缀

    这个“第二个JAVA ME程序——批量添加后缀”项目,显然旨在教授如何利用Java ME进行文件操作,特别是对文件名进行批量处理,比如添加特定的后缀。 在Java ME中,文件操作比在Java SE(标准版)或Java EE(企业版)...

    嵌入式设计及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 嵌入式操作系统...

Global site tag (gtag.js) - Google Analytics