在opengl中旋转到给定方向

在opengl中旋转到给定方向,opengl,rotation,Opengl,Rotation,我开始搞混数学了 我想做一个旋转,将y轴的方向平移到给定的方向 所以我想创建一个有输入方向的函数,并调用glRotatef()。在函数之后,我画的任何东西都应该指向给定的方向,而不是向上 glRotatef有4个参数:角度、x、y、z基本上,您希望将世界y轴与(单位长度)方向对齐d。为了用glRotatef组成旋转矩阵,需要一个轴a=[a_x,a_y,a_z]和一个角度omega 将y带入d的旋转轴垂直于y和d,因此可以通过向量叉积计算: a = cross(y, d); 旋转角度omega只

我开始搞混数学了

我想做一个旋转,将y轴的方向平移到给定的方向

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


glRotatef有4个参数:角度、x、y、z

基本上,您希望将世界
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
需要以度为单位,而不是以弧度为单位。还要检查旋转方向。

如果你把数学本身搞混了,那就是一个成就。。。不管怎么说,你的问题还远远不够具体。所以我不会为你学习OpenGL和数学,对不起。获取一个教程并完成它。谢谢!但是,如果d=向量(0,-1,0)(指向与y轴相反的方向),则叉积非常奇怪。我应该特别检查吗?是的,在这种情况下,您应该在
xz
平面上选择任意单位向量,例如x轴。