gpt4 book ai didi

java - “添加”两个角度

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:17:22 26 4
gpt4 key购买 nike

好的,所以我有两个角度。一个是操纵杆的角度,另一个是摄像机到玩家的角度。相机的角度。现在我想要它,所以当我按下操纵杆时,它会将播放器从相机移开。我该怎么做?在 Java 或 Ardor3d 中是否有一种简单的方法来做到这一点?

编辑:这是我如何获取角度的代码。

float camDegree = (float) Math.toDegrees(Math.atan2(
_canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(),
_canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf());

player.angle = (float) Math.toDegrees(Math.atan2(padX, padY));
Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y);

最佳答案

我不得不说我不太明白你的问题,但它似乎是关于如何使用操纵杆实现相对于相机的控制。

我能给你的最重要的一条建议是,最好不要计算角度,而是直接使用 vector 。

假设相机朝向v方向(在某些类型的游戏中,此 vector 将直接指向玩家,但不是所有类型的游戏,也不总是如此):

the look vector from a camera to a player can be resolved into vertical and horizontal components

通常您不关心此 vector 的垂直分量,因此将其移除以获得水平分量,我将其称为y,原因稍后会变得明显:

y = v − (v · up) up

其中up是一个垂直向上的单位 vector 。

我们可以使用叉积(并记住右手法则)找到垂直于 y 的水平 vector :

x = v × up

the vectors x and y form a horizontal coordinate basis

现在您可以看到 y 是平面中指向前方(远离相机)的 vector ,而 x 是平面中指向右侧(侧面)的 vector 尊重相机)。如果您对这些 vector 进行归一化:

= x / |x|

ŷ = y / |y|

那么您可以使用 ŷ 作为玩家相对于相机运动的坐标基础。如果您的操纵杆读数是 JxJy,则将玩家移动

s (Jx + Jy ŷ)

其中 s 是与玩家速度成正比的适当标量值。

(请注意,在这个答案中的任何一点都没有计算角度!)

关于java - “添加”两个角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4321382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com