【问题标题】:Manually rotate 3D-object's local UP-axis toward World's UP-axis?手动将 3D 对象的局部上轴旋转到世界上轴?
【发布时间】:2019-09-24 07:45:29
【问题描述】:

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

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

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

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

var TopQuat:Quat = Quat(0,0,0,1)
transform.basis = Basis(Quat(transform.basis).slerp(TopQuat,delta))

有任何提示可以将此插值隔离到我的对象的本地上轴吗?

【问题讨论】:

    标签: 3d rotation quaternions godot gdscript


    【解决方案1】:

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

    您正在寻找的是一个四元数,它表示两个 UP 向量之间的轴角旋转。这可以使用两个向量的cross-product 来计算旋转轴,dot-product 来计算两个向量与formula to create a quaternion of an axis and an angle 之间的角度(余弦)。

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

    【讨论】:

    • 感谢您的回答,看起来很完美。不过我突然忙别的事了,以后会测试一下,如果回答了我的问题就接受。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 2015-07-23
    • 2021-01-05
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多