微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Godot GDscript

如何解决在 Godot GDscript

我正在尝试使用 t.translated(translateVector) 函数更改 Godot GDscript 中骨架中骨骼的位置,其中 t 是变换(具有旋转、缩放和位置信息的 3x4 矩阵)。为了将骨骼移动到特定点,提前计算平移向量:translateVector = endPosition - currentPosition。问题是currentPosition是Transform,endPosition是Vector3,不能加减。有没有办法将 Vector3 转换为变换以减去它们? 谢谢

解决方法

你说……

currentPosition 是一个 Transform,endPosition 是一个 Vector3

我不会那样做。如果它是 Transform,我会称它为“转换”,而不是“位置”。我提醒您,Transform 代表旋转和缩放表单位置(即使没有旋转和缩放)。就本回答而言,以“Position”为后缀的变量是 Vector3。以“Transform”为后缀的变量是 Transform


有什么方法可以将 Vector3 转换为变换

您从身份转换开始,然后翻译它:

var endTransform = Transform.IDENTITY.translated(endPosition)

为了减去它们?

没有添加或减去变换之类的东西。相反,变换组合是通过乘法完成的。 Godot 中的变换最接近于核心库提供的矩阵,它们的组合遵循矩阵规则。因此,相反的组合是与逆变换组合:

var relativeTransform = currentTransform.affine_inverse() * endTransform

然后您可以将其组合到您拥有的转换中:

t * relativeTransform

但是,您可能想做相反的事情。您可以从变换中获取位置向量,而不是将向量转换为变换:

var currentPosition = currentTransform.origin

然后你可以减去向量:

translateVector = endPosition - currentPosition

并按照您的预期翻译:

t.translated(translateVector)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。