2012-05-27 18 views
0

我正在製作3D遊戲,並且我需要玩家網格始終朝向相機的後部。我已經想出瞭如何獲得2D速度矢量(沿xz平面的方向),但現在我需要在速度矢量的方向上旋轉網格...給定一個二維方向矢量時,如何計算沿y軸的旋轉?

基本上,每個網格都有一個.rotation屬性,屬性是一個3D矢量。我只對y軸旋轉感興趣,那就是垂直於表面(x-z)平面的那個。

旋轉不使用度,但弧度,所以我認爲這將是這樣的:

mesh.rotation.y = (mesh.direction.x - mesh.direction.z)*Math.PI*2;

但這似乎並沒有削減它...

方向/速度是一個2D矢量,它由-1和1之間的實數組成。在任何時候,它都是sqrt(x*x + y*y) == 1,所以它形成一個「圓」,這是因爲速度需要在所有方向上相等,顯然。

只有當我拖動鼠標在屏幕上,所以必須旋轉,它是這樣計算的速度矢量的變化:

​​
+0

重複:http://stackoverflow.com/questions/10773693/how-to-do-this-coordinate-system-operation-more-efficiently –

回答

1

如果我理解正確的話,atan2會做的伎倆:

mesh.rotation.y = Math.atan2(mesh.direction.z, mesh.direction.x) 

結果以弧度表示。它基本上計算矢量和X軸之間的角度。您可能需要在這裏或那裏切換參數或使用減號運算符。

+0

工程就像一個魅力,謝謝! – corazza