【问题标题】:'adding' two angles“添加”两个角度
【发布时间】:2010-12-01 05:09:35
【问题描述】:

好的,所以我有两个角度。一个是操纵杆的角度,另一个是相机到玩家的角度。相机的角度。现在我想要它,所以当我按下操纵杆时,它会使玩家远离相机。我该怎么做?有没有一种简单的方法可以在 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);

【问题讨论】:

  • 你的“角度”是如何表示的?您真的是在三个维度上工作,还是只使用 3D API?
  • 实际上我只是使用 X 和 Z 轴,所以它只是 2d。我将在主要问题中添加一些代码。

标签: java geometry ardor3d


【解决方案1】:

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

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

假设摄像头朝向v方向(在某些类型的游戏中,此向量将直接指向玩家,但并非所有类型的游戏,而且并非总是如此):

通常您不关心此向量的垂直分量,因此将其删除以获得水平分量,我将其称为 y 原因稍后将变得显而易见:

y = v - (v · up) up

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

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

x = v × 向上

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

= x / |x|

ŷ = y / |y|

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

s (Jx + Jy ŷ)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2011-02-22
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多