我正試圖寫一個小的'透視'javascript應用程序,它允許我通過一組居住在3d空間中的x,y,z點飛行。3d三角函數方程
我有一個相機的概念,改變它的旋轉和xyz位置,而每個點保持一個恆定的xyz點。
然後我有一套方程式,計算出如何調整相機的x,y,z座標以便直接向前飛行。 x,y,z調整顯然取決於相機的旋轉。
它幾乎可以工作,但是在某些「態度」下,攝像機位置調整出錯,航跡不直行,而是以一定角度熄滅,甚至倒轉。計算投影的公式如下:
var directionFactor = 1;
if (direction == 'backward') directionFactor = -1;
sx = Math.sin(cameraView.rotX);
cx = Math.cos(cameraView.rotX);
sy = Math.sin(cameraView.rotY);
cy = Math.cos(cameraView.rotY);
sz = Math.sin(cameraView.rotZ);
cz = Math.cos(cameraView.rotZ);
// Z-Axis
ztrig = Math.sqrt((cx * cx) + (cy * cy)) * (cx * cy);
cameraView.z = cameraView.z + directionFactor *
(Math.abs(airspeed/15) * ztrig);
// Y-Axis
ytrig = Math.sqrt((sx * sx) + (cz * cz)) * (sx * cz);
cameraView.y = cameraView.y + directionFactor *
(Math.abs(airspeed/15) *ytrig);
// X-Axis
xtrig = Math.sqrt((cz * cz) + (sy * sy)) * (cz * sy);
cameraView.x = cameraView.x - directionFactor *
(Math.abs(airspeed/15) * xtrig);
很明顯我的方程式並不完全正確。誰能告訴我我要去哪裏?非常感謝和感謝。
你可以添加你的算法嗎? – 2011-03-27 10:39:34
計算三維座標的標準方法是使用矢量/矩陣數學。有幾個這樣的JavaScript庫。請參閱:http://blog.tojicode.com/2010/06/stupidly-fast-webgl-matricies.html – 2011-03-27 10:43:45