'添加'两个角度

时间:2010-12-01 05:09:36

标签: 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);

1 个答案:

答案 0 :(得分:8)

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

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

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

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

通常你不关心这个向量的垂直分量,所以删除它以得到水平分量,我将其称为 y ,其原因将在以后变得明显:

  

y = v - ( v ·向上向上

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

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

  

x = v ×向上

the vectors x and y form a horizontal coordinate basis

现在你可以看到 y 是指向前方(远离相机)的平面中的向量, x 指向右侧的平面中的向量(侧面带有尊重相机)。如果你将这些向量标准化:

  

x = x / | x |

     

ŷ = y / | y |

然后您可以使用 x ŷ作为播放器相机相对运动的坐标基础。如果你的操纵杆读数是 Jx Jy ,那么移动玩家

  

s Jx x + Jy ŷ

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

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