在opengl中旋转到给定方向

时间:2012-12-01 19:16:48

标签: opengl rotation

我开始混淆数学。

我想进行一次旋转,将y轴的方向转换为给定的方向。

所以我想创建一个具有输入方向的函数,并调用glRotatef()。在函数之后,我绘制的任何东西都应该指向给定的方向而不是向上。

glRotatef有4个参数:angle,x,y,z

1 个答案:

答案 0 :(得分:2)

基本上,您希望将世界y轴与(单位长度)方向d对齐。为了使用glRotatef组成旋转矩阵,您需要一个轴a = [a_x, a_y, a_z]和一个角度omega

y转换为d的旋转轴垂直于yd,因此可以通过矢量叉积来计算:

a = cross(y, d);

旋转角度omega只是矢量yd之间的角度,因此可以从点积计算:

omega = acos(dot(y, d));

现在您可以使用以下内容构建旋转矩阵:

glRotatef(omega, a_x, a_y, a_z);

注意omega需要以度为单位而不是弧度。还要检查旋转方向。