我目前正在为游戏制作mod,我能够获得玩家的XYZ坐标以及他们面临的方向(值在0到360度之间)。我需要使用此信息来弄清楚角色面前的坐标。
例如:如果x = 0,y = 0,z = 0,角色面向0度,南。并假设z轴向北延伸至南部,那么如果角色向前走一个单元,其新坐标为x = 0,y = 0,z = -1。
我假设北部为 z,而东 x。另外,方向0是南方,90在西方。
vec3 DegreeToDirection (float degs) {
float rads = 3.1415926535f / 180 * degs;
float s = sinf(rads), c = cosf(rads);
vec3 ret = {-s, 0, -c};
return ret;
}
现在只需将其添加到您当前的位置。
edit :这是实际上适用于OP的评论中的修改代码:)
void DegreeToDirection (float degs, float out [3]) {
float rads = 3.1415926535f / 180 * degs;
out[0] = sinf(rads);
out[1] = 0.0f;
out[2] = -cosf(rads);
}
因此,说您的角色具有坐标(A, B, C)
,您要创建一个等于一个单元的方向向量(让我们称为R
)。我假设播放器仅在x,y平面上旅行此示例,以便您创建一个方向向量:
v =(r * cos(Angle),r * sin(Angle))
,您将此向量添加到播放器坐标中,因此对于向量(x,y),新播放器坐标为(a x,b y,c)