0

好的,所以我有 2 个向量,敌人位置向量和玩家位置向量。我需要计算音高(我必须沿着 X 轴从敌人位置旋转某些东西以指向玩家的 Y 位置的度数。)

如何获得敌人位置和玩家位置之间的间距?

这是我最后一次尝试,它似乎卡在 0 度左右。

player_pos.normalise();
enemy_pos.normalise();

float dot = Vector3f.dot(player_pos, enemy_pos);


Vector3f rotationVector = new Vector3f(0,0,0);
rotationVector. x = (float) Math.toDegrees(Math.acos(dot));
4

3 回答 3

1

你不只是在寻找不同的角度吗?

double angle = Math.acos(Vector3f.dot(player_pos,enemy_pos) /
                         (player_pos.length() * enemy_pos.length()));
于 2012-07-01T18:24:53.683 回答
0

您在最初的尝试中缺少的东西是您试图指向新方向的当前方向。如果您想弄清楚某物需要以哪种方式旋转,您将需要它。

您绝对不想标准化职位。在这种情况下,该操作没有意义。两个向量之间的点积为您提供了它们之间的角度,但(标准化)实体位置之间的点积为您提供了从原点角度来看这两个项目之间的角度,因此这可能不是您想要的。

我建议在一张纸上画出你所拥有的信息,然后看看你想要什么信息。首先,在这种情况下,您想要什么和什么之间的角度?你想在哪个实体中改变什么?

您可能会发现,当您开始绘制所有内容时,您需要处理的数据以及进行该处理所需使用的操作变得显而易见。

祝你好运!

于 2012-07-02T00:22:34.170 回答
0

好吧,我不太清楚你的意思,如果枪在原点指向敌人和玩家之间的角度是多少,你似乎有什么。

我假设您想将敌人的枪转向玩家。

首先获取玩家相对于敌人的方向 //不要忘记检查零

dir = player_pos -enemy_pos
dir.normalize()

angle = asin(dir.y) or angle = acos(dir.z)
angle = Math.toDegrees(angle);

你将不得不调整象限(asin)

if (z < 0) {
    if (y < 0) {
        angle = -180 - angle;
    }
    else {
        angle = 180 - angle;
    }
}

我没有做太多的游戏开发,所以可能有一个更有效的方法,我也不确定这是否正是你想要的,如果我能画图会容易得多

那是围绕 x 轴,您可能是指围绕 z 轴将 z 替换为 x

于 2012-07-01T19:16:34.260 回答