我正在尝试编写一个小的“透视”Javascript应用程序,允许我飞越3D空间中一组占据x、y、z点的元素。
我有一个相机的概念,该相机改变旋转和xyz位置,而每个点保持恒定的xyz点。
然后,我有一组方程可以计算出相机的x、y、z坐标如何调整以直接向前飞行。x、y、z调整显然取决于相机的旋转。
它几乎可以工作,但在某些“态度”下,相机位置调整会出问题,飞行路径不沿着直线前进,而是以角度或甚至反向偏离。计算投影的方程如下:
显然我的方程式还不够正确。有人能告诉我哪里错了吗?非常感谢和谢谢。
我有一个相机的概念,该相机改变旋转和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);
显然我的方程式还不够正确。有人能告诉我哪里错了吗?非常感谢和谢谢。