繁体   English   中英

3d几何:如何将对象与矢量对齐

[英]3d geometry: how to align an object to a vector

我有一个3d空间中的对象,我想根据向量对齐。 我已经通过在矢量的x和z分量上执行atan2来获得Y旋转。 但我还希望进行X旋转以使对象向下或向上看。

想象一个飞机做它的俯仰偏转滚动,只是没有滚动。

我使用openGL来设置旋转,所以我需要一个Y角和一个X角。

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

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

axis = from X to

从那里,旋转角度可以从from.to = cos(theta) (假设单位矢量)

theta = arccos(from.to)

glRotate(axis, theta)然后将改变fromto

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

您应该使用某种形式的四元数插值( 球面线性插值 )来动画对象从其当前方向到此新方向的动画。

如果使用四元数(向量空间数学)存储方向,则可以非常轻松地获得两个方向之间的最短路径。 有关一篇好文章,请阅读了解Slerp,然后不使用它

如果你使用欧拉角,你将受到万向节锁和一些非常奇怪的边缘情况。

实际上......看看这篇文章。 它描述了Euler Angles,我相信这就是你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM