如何朝着我指向3D世界的方向前进?

时间:2012-09-30 20:10:35

标签: iphone objective-c cocos3d

我正在使用Cocos3D。我有一个相机(在一个只有旋转的“你好,世界”和旋转的地球的世界里,它扮演着第一人看的玩家。我已经让相机指向任何方向,我得到了它移动,但我怎样让相机/播放器朝他指向的方向前进?(他没有上升或下降,即他的y位置不会改变)。

1 个答案:

答案 0 :(得分:0)

我注意到这是一个很老的问题 - 希望这个答案有助于某人!

您需要获取相机的旋转角度,将其转换为弧度并使用三角法获取新的X-Z坐标。告诉你的相机移动到那些坐标和presto,玩家向前移动!

CC3Camera *cam = self.activeCamera;

CC3Rotator *rotator = cam.rotator;
CC3Vector ro = rotatoooor.rotation;
CC3Vector loc = cam.globalLocation;

// If the -90 is left off, you go left/right and not forward
float roA = rotator.rotationAngle-90;

// Bug in rotationAngle? Need this as 315 angle reports as 45
int roI = ro.y;
int diff = roA+90 - roI;
if (diff == 0 && roI == 45)
    roA = 315-90;

double theta = roA * M_PI/180; // Convert to radians
/*
 x = d cos a
 z = d sin a
 */
double sinA = sin(theta);
double cosA = cos(theta);
double newX = distance*cosA + loc.x;
double newZ = distance*sinA + loc.z;

CC3Vector newTo = cc3v(newX, loc.y, newZ); // Pass this to your camera