我试图在 2D 环境中模拟 3D 变换,因此我尝试自己完成 3D 部分的计算
为了参考,我使用了 Node3D 来检查我的计算方法是否正确
func calc_transform_3d(position_3d:Vector3, rotation_3d:Vector3, scale_3d:Vector3 ) -> Transform3D:
var transform_3d := Transform3D(
Basis.from_euler(rotation_3d).scaled(scale_3d),
position_3d
)
return transform_3d
func _ready():
var node_3d:Node3D = $Node3D
var custom_transform := calc_transform_3d(node_3d.position, node_3d.rotation, node_3d.scale)
print(custom_transform == node_3d.transform) # returns false
但是该calc_transform_3d()
方法给出了错误的输出(仅供参考,我检查过这不是浮点错误)
那么仅给定和position
,如何计算 Transform3D(类似于 Node3D 的计算方式)?rotation
scale
旋转和缩放按以下顺序进行:S * R * INPUT。如果您以这种方式变换立方体,则可以轻松得到倾斜的菱形。
翻转顺序并使用局部缩放而不是全局缩放:R * S * INPUT,(这意味着您的立方体只有在缩放时才会变成长方体)。因此,请改为这样编写函数: