3

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

1 回答 1

8

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

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

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

从相机到玩家的视线矢量可以分解为垂直和水平分量

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

y = v - ( v · up ) up

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

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

x = v ×向上

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

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

= x / | x |

ŷ = y / | |

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

s ( Jx + Jy ŷ )

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

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

于 2010-12-01T13:40:04.017 回答