在移动设备上使用M3G编程教程(转)

在开始前我建议你去了解一些关于M3G领域的一些网络链接,这样对我们的编程是有帮助的。

首先也是最重要的就是Sony Ericsson Developer World。第二个我们要经常去看的就是Sony Ericsson Mobile Java 3D forum。除此之外我们还可以使用Sony Ericsson Developer World portal,在这里你能够发现你问题的答案或者更多。

既然你已经知道了如果出了问题我们将去那里找到答案,那么让我们进行我们的教程。这个教程的目标就是教会每个人如何设置你自己的3D动画和在屏幕上材质着色。对于着色模式,我们将展示如何载入他们并且告诉你那些创建M3G模型时使用的工具。然后我们将通过操作摄像机的一些参数使得我们可以在我们的场景中走动。我们只是想使你在开发第一个使用M3G的3D游戏中感到更直观,所以这个教程将相当快和直接,而有很少的解释,在这系列教程的其他部分将会对M3G的其他属性进行详细的讨论。

既然这个程序代码是针对教学目的的,它不是最佳的也不能覆盖所有可能出现的错误。我们将在以后的部分中讨论更多的深入的问题。

你需要知道什么

我们在开始阅读这篇文章之前,你应当了解一个MIDlet类和一个Canvas类的基本部分。如果你感到迷糊,参考游戏代码(这个教程中讨论的)和查看M3GMIDlet和M3GConvas类,这并不是一个困难的问题。当然如果你有3D编程和数学的背景那将是一件很好的事情,但并不是必须的。

Convas画板

当我们使用JSR184库编程时,我们使用的时MIDP2.0的配置文件,这意味着我们可以自用的使用更多的功能。让我们从设置我们的屏幕画板开始。和我们在通常的2D游戏编程有着同样的过程。你需要设置你的MIDlet类,并且启动你的屏幕画板和在Paint方法中进行绘画。既然你已经知道如何作并且这是一个相当容易的过程,我们将跳过这个过程。首先让我们看一下Canvas类的开头,这里是一些导入文件和变量声明。

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.M3G.Camera;
import javax.microedition.M3G.Graphics3D;
import javax.microedition.M3G.Light;
import javax.microedition.M3G.Loader;
import javax.microedition.M3G.Object3D;
import javax.microedition.M3G.Transform;
import javax.microedition.M3G.World;

/**
*
* @author Biovenger
* @version
*/
public class M3GCanvas
extends GameCanvas
implements Runnable {
// Thread-control
boolean running = false;
boolean done = true;

// If the game should end
public static boolean gameOver = false;

// Rendering hints
public static final int STRONG_RENDERING_HINTS = Graphics3D.ANTIALIAS | Graphics3D.TRUE_COLOR | Graphics3D.DITHER;
public static final int WEAK_RENDERING_HINTS = 0;
public static int RENDERING_HINTS = STRONG_RENDERING_HINTS;

// Key array
boolean[] key = new boolean[5];

// Key constants
public static final int FIRE = 0;
public static final int UP = FIRE + 1;
public static final int DOWN = UP + 1;
public static final int LEFT = DOWN + 1;
public static final int RIGHT = LEFT + 1;

这是相当基础的部分,让我们快速的查看这段是用来干什么的。事项我们看到的是一些导入文件,我们只导入了我们在教程中使用的所有的类和你在JSR184 API文档中发现的其他的类文件。我们也看到了一些其他的例如running和done这样的一些线程变量,不过这些都是一些自解释型的。

现在,让我们看一下“rendering hints”,这些“hits”是用来告诉我们当我们要着色的时候使用的是什么样的质量。既然这些着色的质量是依赖于手机的,所以我们第一了两个不同的“hits”:弱和强。正如你看到的一样,弱的着色模式是使用双消除混叠现象、真实的颜色、和抖动。弱的模式根本就没有着色的效果,这是我们能够得到的最快和最差的着色模式。当你查看代码的时候,这些不同的效果可以通过使用简单的逻辑OR来合并。在我们系列文章的后面章节中将会展示更多的特效效果。

接下来我们看到的实按键数组,我们使用了简单的数组形式,在键盘操作进程中他们将被改变。如果你对按键是如何处理的感到好奇,你可以在例子代码中找到相关的代码。举例说明一下,如果我们的UP键被按下那么if(key[UP])将是正确的。

M3G文件格式

JSR184有它自己的文件格式,叫做M3G。这是一个通用的3D文件格式,这里可以存储例如模型、灯光、摄像机、蒙皮甚至动画。注意,不但这个格式是好的,将模型载入你的应用程序也是相当容易的。我敢说M3G将是无止境的。我们怎样来建立一个M3G文件呢?我在下面的部分将来解释集中建立M3G的方法:

1. 首先,最新的Discreet's 3D Studio Max版本已经内建了一个M3G的导出器。我们只需要点击导出按钮,你就能导出你建立的场景、动画、骨骼、材质等成为M3G文件。然而,很多人发现Discreet的导出器比较麻烦并且有一些错误,所以为了得到更好的效果,我们使用第二种方法。

2. HI公司是索尼爱立信公司的JSR184接口的提供者,他们制作了针对3个十分流行的3D建模软件例如3D Studio Max, LightWave和 Maya的插件,你可以在here>>找到他们。

3. Blender,这是一个具有可用的M3G导出器的免费的3D建模工具,然而它在开发的比较早,并且有一些错误。

那么我们怎样在我们的程序中调入这些非常有用的文件呢?非常简单。在JSR184中包含一个类叫做Loader,它可以正确的做到这点。使用一个简单的方法就能从一个M3G文件中载入所有的对象。一个可以是字符串类型的URL另一个方法是一个原始字节流中的偏移,下面是如何使用的例子:

Object3D[] objects = Loader.load("file.M3G");

Object3D[] objects2 = Loader.load(byteArray, offset);


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126634/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126634/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值