我正在为游戏制作一个mod,我可以获得玩家的XYZ坐标以及他们面对的方向(0到360度之间的值)。我需要使用这些信息来确定角色前面的坐标是根据他们面对的方式。
例如:如果x = 0,y = 0,z = 0且角色面向0度,则为南。假设z轴从北向南运行,那么如果角色向前走一个单位,他们的新坐标将是x = 0,y = 0,z = -1。
答案 0 :(得分:1)
我假设North是+ Z而East是+ 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;
}
现在只需将其添加到您当前的位置。
编辑:这是来自实际为OP工作的注释的修改代码:(注意X返回值没有否定,这可能意味着我对X轴的假设是错误的。 )
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);
}
答案 1 :(得分:0)
所以说你的角色有坐标(A, B, C)
,你想要创建一个等于一个单位的方向向量(让我们称之为R
)。我假设玩家只在这个例子的x,y平面上旅行,所以你会创建一个方向向量:
V =(R * cos(角度),R * sin(角度))
你可以将这个向量添加到你的玩家坐标,所以对于一个向量(x,y),新的玩家坐标将是(A + x,B + y,C)