我开始混淆数学。
我想做一个旋转,将 y 轴的方向转换为给定的方向。
所以我想做一个有输入方向的函数,并调用glRotatef()。在函数之后,我绘制的任何东西都应该指向给定的方向而不是向上。
glRotatef 有 4 个参数:角度、x、y、z
基本上,您希望将世界y
轴与(单位长度)方向对齐d
。为了用 glRotatef 组成一个旋转矩阵,你需要一个 axisa = [a_x, a_y, a_z]
和一个 angle omega
。
y
取入的旋转轴d
垂直于y
和d
,因此可以通过向量叉积计算:
a = cross(y, d);
旋转角度omega
只是向量y
和之间的角度d
,因此可以从点积计算:
omega = acos(dot(y, d));
现在您可以使用以下方法构建旋转矩阵:
glRotatef(omega, a_x, a_y, a_z);
请注意,omega
需要以度为单位,而不是弧度。还要检查旋转方向。