OpenGL ES教程十二 联系客服

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

我们可以很容易的得到红色点的坐标.

我们先设计目标位置的相对坐标 deltaX 和 deltaZ:

deltaX = 1.5 - 1.0 = 0.5 deltaZ = -10 - (- 5.0) = -5.0

所以现在乘上我们的步行速度:

xDisplacement = deltaX * WALK_SPEED = 0.5 * 0.01 = 0.005

zDisplacement = deltaZ * WALK_SPEED = -5.0 * 0.01 = 0.05

因此,那个红色的新点位置就是: eyeC + CDisplacement

(eyex + xDisplacement, eyey, eyez + zDisplacement) = (0.005+1.0, eyey,(-10)+ 0.05) = (1.005, eyey, -9.95)

现在,这种方法不是没有缺点。主要的问题是,如果目标与当前位置距离越远,那么“步行速度”也就越快。

现在,让我们看下转左和转右。

因为我们在模拟旋转。实际上目标位置就是在一个圆上移动。

这里的关键在于,你要明白我说的是什么。你可以把当前所在位置想像为圆心,目标位置是圆边。转向就是在圆边上移动。

换句话说,这就是:

newX = eyeX + radius * cos(TURN_SPEED)*deltaX - sin(TURN_SPEED)*deltaZ

newZ = eyeZ + radius * sin(TURN_SPEED)* deltaX +

cos(TURN_SPEED)*deltaZ

处理触摸及涉及到运动

现在,让我们把这个转化为实践。

首先,实现开始的方法和一些基本知识:

- (void)handleTouches {

if (currentMovement == MTNone) {

// We're going nowhere, nothing to do here return; }

首先,看看我们是不是在移动,如果没有操作,就什么事情也不做。

然后,无论我们是在移动还是转弯,我们都需要知道相对距离 deltaX 和 deltaZ 的值。我找一个临时数组把我们保存起来。

GLfloat vector[3];

vector[0] = center[0] - eye[0]; vector[1] = center[1] - eye[1]; vector[2] = center[2] - eye[2];