我正试图使用t.translated(translateVector)
函数在Godot GDscript中更改电枢中骨骼的位置,其中t是一个变换(具有旋转、缩放和位置信息的3x4矩阵(。为了将骨骼移动到特定点,平移向量会提前计算:translateVector = endPosition - currentPosition
。问题是currentPosition是Transform,endPosition是Vector3,这些不能相加或相减。有没有办法将Vector3转换为一个变换来减去它们?感谢
你说…
currentPosition是一个Transform,endPosition是Vector3
我不会那样做。如果它是Transform
;变换";,而不是";位置";。我提醒您,Transform
表示旋转和按比例缩放窗体位置(即使旋转和缩放为零(。为了这个答案的目的;位置";是CCD_ 5。和一个后缀为"的变量;变换";是CCD_ 6。
是否有任何方法将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)