2010-12-01 88 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是與玩家速度成正比的適當標量值。

(請注意,在此答案中的任何點都不計算角度)