OpenGL ES教程十二 联系客服

发布时间 : 星期六 文章OpenGL ES教程十二更新完毕开始阅读d4baf1305a8102d276a22fda

OpenGL ES 13 – 在 3D中移动

(译者:那个。其实,实际上,我又跳了一章,12节,如何判断在2d世界里点中一个物体,因为我觉得我们这大部分的游戏开发者都已经使用了花生大大的代码,也比较容易的在2d世界里开发游戏了,这个章节对我们的用处不大。所以我又偷懒了。)

禽流感,忙碌,母亲节,和其他一些东西,这就意味着,我不在此博客一段时间。所以,现在是时候做事情了。

3D中的移动

我的时间很紧迫,所以今天会是一个真正的快速入门。我们将开始建立一个“真正的”3d世界,从地板开始建立一切的东西。然而,在我开始之前,我像先介绍如何在3d中移动。

今天,我们将开始一些新的代码,围绕着地板,进行触摸及移动。在使用触摸,我们可以转左,转右,前进及后退。没有跑,没有抬头看,仅仅是走,因为这更加的容易。我不要实现他们是为了没有iPod及iPhone的朋友也可以在模拟器上实现它。

在开始之前,你先下载下面的开始函数:

OpenGL ES 13 - Starter

这里没有太多的代码,只是让我们知道我们要做什么。

虚拟的照相机

我想我跟你提过了,人们用照相机在3d世界中观察事物,虽然OpenGL中实际上不存在照相机的。所以你在屏幕中移动的时候,你实际在移动所有的对象,运动的感觉的产生不是因为创建了一个照相机来看电影,而是因为将世界中的所有对象以(0,0,0)为相对坐标移动。

听上去好像这样的工作量非常的大,其实没有。因为根据你的应用,会执行很多的优化工作,即使很大的世界也没有太多的工作量。我以后会提到它。

为了工作更方便,我为本教程带来了帮手,来自于OpenGL ES的大哥 GL U的library中的函数:gluLookAt()。

通常我不提及OpenGL的优点,但我想大部分的人都知道什么是GLU

library。遗憾的是OpenGL ES不支持这个函数库,这意味了我们少了很多有用的功能。移植这些功能不需要移植整个library,只需要实现少许我们需要的功能。

我找到了gluLookAt()的源代码,所以这些的代码的版权不是我的。

使用 gluLookAt()

这个函数是如此的简单使用,以至于你只要了解它就能使用,让我们来看看原型:

void gluLookAt( GLfloat eyex, GLfloat eyey, GLfloat eyez, GLfloat centerx, GLfloat centery, GLfloat centerz,

GLfloat upx, GLfloat upy, GLfloat upz)

我知道9个参数看起来有点令人生畏,但你可以分解。前3个是指眼睛的位置,在这里你要找的,只是x,y,z的坐标。

这第2组3个参数是指你想看哪里,又一个x,y,z的坐标。

最后,我们看最后3个“up”的向量。前2个坐标就是我想要的效果。

所以,眼睛的坐标就是神秘的照相机的位置,它们在你的世界坐标里。从这里看你的世界。那个“中心”坐标就是你面向那里。如果中心的y坐标高于你眼睛的y坐标,那么你就朝上看,如果低于呢,你就朝下看。

所以,在我们开始的工程里,我们就已经准备号设置如何移动了。现