2010-12-01 61 views
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); 
+0

您的“角度”如何表示?你真的在三维工作,或者只是使用3D API? – 2010-12-01 05:22:44

回答

8

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

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

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

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

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

Ŷ = v - (v·向上向上

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

我们可以发现水平矢量使用叉积(和记忆右手法则)这就是垂直于ÿ

X = v×向上

the vectors x and y form a horizontal coordinate basis

现在您可以看到是指向前方(远离相机)的平面中的矢量,并且x指向右侧(相对于相机侧向)的平面中的矢量。如果您标准化这些向量:

X = X/| x |

ŷ = y/| | y |

那么你可以使用Xŷ作为玩家的相机相对运动的坐标基准。如果您的游戏杆读数JXJY,然后通过

小号移动播放器(JXX + JYŷ

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

(请注意,在此答案中的任何点都不计算角度)