如何在XYZ播放器平面中找出前向坐标



我目前正在为游戏制作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)

最新更新