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)
我不得不说,我真的不明白你的问题,但它似乎是有关如何使用操纵杆来实现摄像头相对控制.
我能给你的最重要的建议是,最好不要计算角度,而是直接使用矢量.
假设摄像机观察的方向v(在某些类型的游戏这一载体直接在播放器被人指指点点的,但不是所有类型的游戏,而不是总是):

通常,你不关心这个矢量的垂直分量,因此将其删除得到的水平分力,我会打电话给Ÿ原因后,将变得明显:
y = v - (v · up)up
其中up是垂直向上指向的单位向量.
我们可以使用叉积找到与y垂直的水平向量(并记住右手规则):
x = v × up

现在你可以看到y是指向前方(远离摄像机)的平面中的向量,x是指向右侧(相对于摄像机侧向)的平面中的向量.如果您将这些向量标准化:
x = x/| x |
ŷ = y/| y |
然后你可以使用x和ŷ作为玩家相机相对运动的坐标基础.如果你的操纵杆读数是Jx和Jy,那么移动玩家
小号(JX X + JY ŷ)
其中s是与玩家速度成正比的适当标量值.
(注意,在这个答案中的任何一点都没有计算出角度!)