在移动设备上使用M3G编程教程 |
| 作者:碧云天 来源:翻译 发布时间:2005-12-20 2:30:23 |
|
据。它可以转换成任何一个从Object3D类中继承过来的类。虽然,你们几乎都是使用这种方式来调入M
现在,我创建了一个简单的M
** Loads our world */
正如你所看见的,我们使用Loader类载入Object3D数组以后,我们只需要简单地遍历整个数组并且找到World节点。这是查找一个World节点的最安全的方法。当我们发现我们的World节点以后我们应当中断我们的循环并且清除我们的缓冲区(既然不需要了,就应当删除了,虽然离开方法以后会自动删除,但养成好的习惯)。
好了,新在我们已经载入了我们的World节点,也就是我们已经知道了一个场景的最高节点,和操作所有节点的信息。在向你展示简单的显示他们之前,让我们首先来展示一下我们如何移动一个摄像机在我们刚刚载入的文件中。
摄像机操作:
我们已经有一个准备绘制的World节点那么我们需要一个摄像机,这个摄像机的作用是使我们能够在整个世界中移动。如果你回忆一下你会发现我们已经准备好了一个我们能够使用的摄像机信息。所以我们应当从World中拾取出摄像机,并且操作它。
在JSR184中一个摄像机通过Camera类来描述。这个类使得我们在我们的3D程序中更容易的操作摄像机完成简单地定位和旋转方法。我们在例子中只使用了两个方法分别是translate(float, float, float)和setOrientation(float, float, float, float)。第一种方法是在3D空间中移动偏移为X,Y和Z。举个例子,如果你想移动摄像机到X轴3个单位和Z轴3个单位,你应当做如下处理: Camera cam = new Camera(); // This is our camera
//移动摄像机偏移 X Y Z
小菜一碟,每个方法调用移动摄像机是在以前的基础上操作,也就是入阁我们调用了两次以上的方法那么实际上我们是在X轴上移动了6个单位、在Z轴上也移动了6个单位。旋转就象移动一样简单,但是我们首先还要解释一下这个方法。它看起来十分象3DAPI旋转的方法。我们需要四个参数,第一个参数是旋转的实际角度,其他三个参数是一个要旋转的方向向量(X轴,Y轴,Z轴)。转向和方向向量将在以后讲到,现在,我们只需要知道以下的就可以了:
//沿着X轴旋转30度
//沿着Y轴旋转30度
//沿着Z轴旋转30度
注意这个方法的名称是setOrientation,这意味着将清除摄像机以前的的所有旋转操作。我假设你已经知道了沿着一个轴旋转的意义是什么,我们将不再这里讨论这个问题。 既然你已经知道了操作一个摄像机移动和旋转的方法,我们将展示如何从一个World中提取一个摄像机。 /** 载入我们的摄像机 */
这个容易吗?它很容易。我们只是使用getActiveCamera方法从World中提取当前活动的摄像机。这是我们世界被导出的时候已经带的摄像机。通过以上的方法我们得到了一个我们可以根据我们的想法来操作的摄像机。然而这个函数中也做了其他们功能,这里添加了一个灯。我们将在以后的章节中深入的讲述灯光,但是这里我们看见在世界中添加一个灯光是如此的容易。我们创建了一个环境灯光(如果你不知道,那么环境灯光就是所有的表面都被灯光从每个方向照亮。)并且添加到世界中。这个方法是我们得到了一个真实的世界,正如我在以前对你们讲到的,World节点能够操作所有类型的节点信息,包括灯光,所以我们只需要在我们的世界中添加一次灯光,JSR184将为我们操作。难道还手动的设置吗?我们在开始下一个部分:显示之前,让我们来移动摄像机。我们已经在以前提到了存储键盘信息的布尔型的数组,所以我们处理数组和操作我们的摄像机行为。首先我们需要一些使我们摄像机运动的变量。 // 摄像机旋转
以上的变量帮助我们保存摄像机的旋转,移动和头部抖动的信息。三角函数使用是为了以后的摄像机移动。头部抖动实现的也相当简单,当我们在世界中移动的时候我们使得摄像机上下抖动,这只是对视觉的一种欺骗,看起来更自然的感觉。好了,我们已经说明了所有的关于摄像机移动的问题了,我们在下面的方法中展示:
private void moveCame |
| [] [返回上一页] [打 印] |
|
文章评论 |
