我开始混淆数学。
我想进行一次旋转,将y轴的方向转换为给定的方向。
所以我想创建一个具有输入方向的函数,并调用glRotatef()。在函数之后,我绘制的任何东西都应该指向给定的方向而不是向上。
glRotatef有4个参数:angle,x,y,z
答案 0 :(得分:2)
基本上,您希望将世界y
轴与(单位长度)方向d
对齐。为了使用glRotatef组成旋转矩阵,您需要一个轴a = [a_x, a_y, a_z]
和一个角度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
需要以度为单位而不是弧度。还要检查旋转方向。