【发布时间】:2013-02-18 22:15:38
【问题描述】:
我正在尝试创建一个类来控制 OpenGL 中的相机。 我有三种方法可以改变相机的俯仰偏航和滚动。 这些方法采用浮点参数作为要添加的旋转量。
这些方法中的代码是我需要帮助的地方。旋转存储在 Vector3 中。 到目前为止,我有改变音高的方法:
void changePitch(float degrees)
{
float rads = MathHelp::degreesToRadians(degrees);
m_rotation.x += cos(m_rotation.y) * rads;
}
这是我自己能做到的。它有点工作,相机在向上或向下看 z 轴时向上和向下看,而不是在向下看 x 轴时。我尝试添加 z 旋转:
m_rotation.z += sin(m_rotation.y) * rads;
但这并不顺利。
【问题讨论】:
-
在进入三角函数之前,必须应用从度数到弧度的转换。不乘以 sin、cos 或 tan 的结果。
-
角度以弧度形式存储在向量中。
-
所以?
rads是一个常数,要乘以进入 sin 的角度,而不是乘以它的结果,即 ``cos(m_rotation.y * rads)` - 但是你不能简单地“添加”旋转。这根本不是它的工作原理。旋转的串联是乘法的。 -
rads 是参数(浮点度)到弧度的转换。这是要转的金额。
-
如果这样更容易理解,此方法将用于将音高更改给定的度数。
标签: c++ opengl camera rotation trigonometry