在 Godot GDscript 中翻译骨架中的骨骼
Translate a bone in an armature in Godot GDscript
我正在尝试使用 t.translated(translateVector)
函数更改 Godot GDscript 中骨架中骨骼的位置,其中 t 是一个变换(具有旋转、比例和位置信息的 3x4 矩阵)。为了让骨骼移动到特定的点,平移向量被提前计算:translateVector = endPosition - currentPosition
。问题是 currentPosition 是一个 Transform,endPosition 是一个 Vector3,它们不能相加或相减。有什么方法可以将 Vector3 转换为转换以减去它们吗?
谢谢
你说……
currentPosition is a Transform, and the endPosition is a Vector3
我不会那样做。如果是 Transform
,我会称之为“转换”,而不是“位置”。我提醒你,Transform
表示旋转和缩放放在一边的位置(即使旋转和缩放是 none)。就此答案而言,后缀为“Position”的变量是 Vector3
。而后缀为“Transform”的变量是 Transform
.
Is there any way to convert a Vector3 into a transform
您从身份转换开始,然后翻译它:
var endTransform = Transform.IDENTITY.translated(endPosition)
in order to subtract them?
没有加法或减法这样的东西。相反,变换组合是通过乘法完成的。 Godot 中的变换最接近核心库提供的矩阵,它们的组合遵循矩阵规则。于是,相反的合成就是用逆变换合成:
var relativeTransform = currentTransform.affine_inverse() * endTransform
然后您可以将其组合到您拥有的转换中:
t * relativeTransform
但是,您可能想做相反的事情。您可以从变换中获取位置向量,而不是将向量转换为变换:
var currentPosition = currentTransform.origin
然后你可以减去向量:
translateVector = endPosition - currentPosition
并按照您的预期进行翻译:
t.translated(translateVector)
我正在尝试使用 t.translated(translateVector)
函数更改 Godot GDscript 中骨架中骨骼的位置,其中 t 是一个变换(具有旋转、比例和位置信息的 3x4 矩阵)。为了让骨骼移动到特定的点,平移向量被提前计算:translateVector = endPosition - currentPosition
。问题是 currentPosition 是一个 Transform,endPosition 是一个 Vector3,它们不能相加或相减。有什么方法可以将 Vector3 转换为转换以减去它们吗?
谢谢
你说……
currentPosition is a Transform, and the endPosition is a Vector3
我不会那样做。如果是 Transform
,我会称之为“转换”,而不是“位置”。我提醒你,Transform
表示旋转和缩放放在一边的位置(即使旋转和缩放是 none)。就此答案而言,后缀为“Position”的变量是 Vector3
。而后缀为“Transform”的变量是 Transform
.
Is there any way to convert a Vector3 into a transform
您从身份转换开始,然后翻译它:
var endTransform = Transform.IDENTITY.translated(endPosition)
in order to subtract them?
没有加法或减法这样的东西。相反,变换组合是通过乘法完成的。 Godot 中的变换最接近核心库提供的矩阵,它们的组合遵循矩阵规则。于是,相反的合成就是用逆变换合成:
var relativeTransform = currentTransform.affine_inverse() * endTransform
然后您可以将其组合到您拥有的转换中:
t * relativeTransform
但是,您可能想做相反的事情。您可以从变换中获取位置向量,而不是将向量转换为变换:
var currentPosition = currentTransform.origin
然后你可以减去向量:
translateVector = endPosition - currentPosition
并按照您的预期进行翻译:
t.translated(translateVector)