我正试图写一个小的'透视'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