1

I am using Cocos3D. I have a camera (which acts as the first-person viewed player in a world with only a spinning "hello, world" and a spinning earth. I have made it possible for the camera to point in any direction, and I have got it to move, but how do I get the camera/player to move forward in the direction he is pointing? (He does not go up or down, i.e. his y position does not change).

4

1 回答 1

0

我注意到这是一个相当古老的问题 - 希望这个答案可以帮助某人!

您需要获取相机的旋转角度,将其转换为弧度并使用三角函数来获取新的 XZ 坐标。告诉你的相机移动到那些坐标,然后玩家已经向前移动了!

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
于 2013-04-30T06:41:15.427 回答