我开始对数学感到困惑。
我希望制作一个旋转功能,将Y轴的方向转化为给定的方向。
因此,我想要一个输入方向的函数,并调用glRotatef()。在函数之后,我所画的任何东西都应该指向给定的方向而不是向上。
glRotatef有4个参数:角度、X、Y、Z。
基本上,您想要将世界y
轴与长度为1的方向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
的单位应为度而非弧度。同时检查旋转方向。
xz
平面上任意的单位向量,比如x轴。 - mrucci