3d 手动旋转三维对象';s局部向上轴朝向世界';什么是上轴线?

3d 手动旋转三维对象';s局部向上轴朝向世界';什么是上轴线?,3d,rotation,quaternions,godot,gdscript,3d,Rotation,Quaternions,Godot,Gdscript,我的对象可以在世界上有任何(未知)旋转 我需要插值这个对象的局部向上轴,朝向世界的向上轴,而不接触对象的其他局部旋转(想象一个浮标在波浪撞击后自行扶正) 但是,我只能同时插入所有对象的轴“朝向所有世界轴”,有效地将对象与世界对齐,就像一个训练有素的朝鲜阅兵兵兵 我正在使用此代码来完成我的失败: var TopQuat:Quat = Quat(0,0,0,1) transform.basis = Basis(Quat(transform.basis).slerp(TopQuat,delta))

我的对象可以在世界上有任何(未知)旋转

我需要插值这个对象的局部向上轴,朝向世界的向上轴,而不接触对象的其他局部旋转(想象一个浮标在波浪撞击后自行扶正)

但是,我只能同时插入所有对象的轴“朝向所有世界轴”,有效地将对象与世界对齐,就像一个训练有素的朝鲜阅兵兵兵

我正在使用此代码来完成我的失败:

var TopQuat:Quat = Quat(0,0,0,1)
transform.basis = Basis(Quat(transform.basis).slerp(TopQuat,delta))
有没有关于将此插值隔离到对象的局部上轴的提示?

四元数将在两个方向四元数之间插值-即,当插值权重达到1.0时,对象的帧将与世界帧匹配

您要查找的是一个四元数,它表示两个上方向向量之间的轴角度旋转。这可以使用两个向量中的一个来计算旋转轴,计算两个向量和旋转轴之间的角度(余弦)


根据用于实现的框架,您可能已经在四元数类上实现了这样的方法。例如,OpenEXR的
Imath::Quaternion
类包含一个,实现了上述算法的更高级版本。

谢谢您的回答,看起来很完美。然而,我突然忙于其他事情,并将在稍后的某个日期测试它,然后接受,如果它回答了我的问题。