|
}
// If the user presses the FIRE key, let's quit if(key[FIRE]) M3GMidlet.die(); }
这里我们检查UP或DOWN键,UP键将移动照相机向前,DOWN键将移动照相机向后。这是一个简单的平移,但我还是要做出简单的说明。照相机总是朝着负Z轴方向的,因此要向前移动照相机,我们只需要在负Z轴上移动它。然而,如果我们旋转照相机,我们不能只沿着Z轴移动了,这样会导致错误。我们想在X轴上移动照相机,因此我们要得到我们希望的动作。这个就需要使用三角函数。这个指南不是讲解3D算术的,我将不会讲更多细节,毕竟你应该知道这些,如果你认为它是复杂的,那就在网络上找一个好的3D算术指南看看吧。
在每次平移后,我们总是要移动顶点用我简单的顶点振动。我只提供在Y轴上转化方法用sine函数,因此它看上去是顶点上下移动,这也是为什么在照相机每次移动时我增加或减少headDeg变量。在代码的末端,我们同样的检查FIRE键,是为了能让用户随时退出程序的。(它能使用在画布创建是我添加的无形的EXIT命令)。
好的,这是我们所有高级照相机动作,现在让我们了解如何绘制世界结点。
绘制
在编码之前,我将告诉你关于立即保留模式绘制。在我们的指南中,保留模式是一种基本模式,你可以用来绘制整个世界结点和所有照相机、灯光和网眼。这是最简单的绘制模式,不过你还是需要控制你的世界。立即模式是直接绘制组中的网眼和顶点数据。这个给你更多的控制权,每个绘画都提供一个变换矩阵,在重绘前变换这个对象。在立即模式,你可以绘制一个世界结点,提供一个转化矩阵让绘制方法调用,不过你得放弃世界结点的漂亮的效果,例如照相机、背景等。在后面的丛书里,我将详细介绍两种绘制模式的不同。现在,让我们看看如何绘制一个世界。
Graphics3D
JSR 184的所有绘制都是靠Graphics3D对象完成的。如果你在立即模式下绘制,它能控制照相机和灯光信息。现在我们不用担心,我在后面讲会讲解到这些。
要用Graphics3D对象绘制,首先你必须绑定它给一个图形上下文。一个图形上下文基本上意味着所有能画的图形对象。如果你想绘制一张图片,它能成为一个图片的图形对象,或者它也可以通过getGraphics()方法获取一个主图形对象。使用主图形对象,你可以直接绘制你想要的场景。获得一个Graphics3D对象是简单的,你只需要调用Graphics3D.getInstance()方法。每个MIDlet只能获得一个Graphics3D对象,这就是为什么只能通过getInstance方法获得该对象。绑定使用bindTarget方法,同时还使用了一些其他方法,让我们看下面的例子:
//Here is our Graphics3D object
上一篇:使用Java蓝牙无线通讯技术API(第一部分 -API概览)(1)
下一篇:java多线程设计模式详解之四
|