Opengl 三维几何体:如何将对象与向量对齐

Opengl 三维几何体:如何将对象与向量对齐,opengl,3d,vector,geometry,Opengl,3d,Vector,Geometry,我有一个三维空间中的对象,我想根据向量对齐。 我已经通过对向量的x和z分量做atan2得到了Y旋转。但我也希望有一个X轴旋转,使物体向下或向上看 想象一架飞机做俯仰偏航滚转,只是没有滚转 我正在使用openGL设置旋转,因此我需要一个Y角和一个X角。事实上……看看它描述了欧拉角,我相信这就是你想要的。我不会使用欧拉角,而是使用欧拉轴/角。就这点而言,这就是Opengl glRotate用作输入的内容 如果您只想将一个向量映射到另一个向量,那么需要进行无限次的旋转。对于最短的一个(旋转角度最小的一

我有一个三维空间中的对象,我想根据向量对齐。 我已经通过对向量的x和z分量做atan2得到了Y旋转。但我也希望有一个X轴旋转,使物体向下或向上看

想象一架飞机做俯仰偏航滚转,只是没有滚转


我正在使用openGL设置旋转,因此我需要一个Y角和一个X角。

事实上……看看它描述了欧拉角,我相信这就是你想要的。

我不会使用欧拉角,而是使用欧拉轴/角。就这点而言,这就是Opengl glRotate用作输入的内容

如果您只想将一个向量映射到另一个向量,那么需要进行无限次的旋转。对于最短的一个(旋转角度最小的一个),可以使用
from
to
单位向量的叉积找到的向量

axis = from X to
从那里,可以从
from.to=cos(θ)
中找到旋转角度(假设单位向量)

glRotate(轴,θ)
然后将
转换为


但正如我所说的,这只是众多轮换中的一种。您需要一个完整的参考来更好地定义您希望如何完成变换。

您应该使用某种形式的四元数插值()来设置对象从当前方向到新方向的动画

如果使用四元数(向量空间数学)存储方向,则可以非常容易地获得两个方向之间的最短路径。要想获得一篇好文章,请阅读


如果你使用Euler角,你会受到万向节锁定和一些非常奇怪的边缘情况的影响。

因此对象有某种前向向量,你想计算将对象与任意选择的向量对齐所需的旋转矩阵?是的,我也找到了那篇文章。我会更深入地研究它。谢谢
theta = arccos(from.to)