'添加'两个角度

Wil*_*iam 3 java geometry ardor3d

好吧,所以我有两个角度.一个是操纵杆的角度,另一个是相机与玩家的角度.相机的角度.现在我想要它,所以当我按下操纵杆时,它会让玩家远离相机.我该怎么做?在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);
Run Code Online (Sandbox Code Playgroud)

Gar*_*ees 8

我不得不说,我真的不明白你的问题,但它似乎是有关如何使用操纵杆来实现摄像头相对控制.

我能给你的最重要的建议是,最好不要计算角度,而是直接使用矢量.

假设摄像机观察的方向v(在某些类型的游戏这一载体直接在播放器被人指指点点的,但不是所有类型的游戏,而不是总是):

从相机到播放器的外观矢量可以分解为垂直和水平分量

通常,你不关心这个矢量的垂直分量,因此将其删除得到的水平分力,我会打电话给Ÿ原因后,将变得明显:

y = v - (v · up)up

其中up是垂直向上指向的单位向量.

我们可以使用叉积找到与y垂直的水平向量(并记住右手规则):

x = v × up

向量x和y形成水平坐标基础

现在你可以看到y是指向前方(远离摄像机)的平面中的向量,x是指向右侧(相对于摄像机侧向)的平面中的向量.如果您将这些向量标准化:

x = x/| x |

ŷ = y/| y |

然后你可以使用xŷ作为玩家相机相对运动的坐标基础.如果你的操纵杆读数是JxJy,那么移动玩家

小号(JX X + JY ŷ)

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

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