【问题标题】:How to get global world coordinates of bone in Godot GDscript如何在Godot GDscript中获取骨骼的全球世界坐标
【发布时间】:2021-09-23 21:55:35
【问题描述】:

我正在用 GDscript 在 Godot 中编写一个程序,旨在改变骨架中多个骨骼的位置。骨骼通过一个值进行平移,该值由我希望骨骼移动到的点减去骨骼的当前位置计算得出。 translateValue = endPoint - currentPoint 但是,所有值都必须位于世界坐标或全局位置,代码才能工作。 Godot 有多种方法来检索骨骼变换以访问位置,例如:skeleton.get_bone_pose() , skeleton.get_bone_global_pose , skeleton.get_bone_rest。我尝试使用skeleton.get_bone_global_pose ,但它没有给出全局位置,而且似乎仍然与某些东西相关。还有to_global() 方法,但我不完全确定它的作用。有人可以解释这些方法之间的区别以及如何获得全球定位吗?谢谢!

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    我将从这些方法开始:

    • get_bone_rest
    • get_bone_custom_pose
    • get_bone_pose

    首先,get_bone_rest 为您提供了骨骼相对于其父骨骼的默认变换。然后按照上面的顺序堆叠另一个变换。


    那么我们有:

    • get_bone_global_pose

    此方法为您提供骨骼的最终变换。它是相对于Skeleton 的。也就是说,这个变换已经包含了前面提到的变换,从父骨骼到子骨骼的组合。

    因此,将其结果转换为世界空间就是组合Skeleton的变换:

    $Skeleton.global_transform * $Skeleton.get_bone_global_pose(bone_index)
    

    我们有:

    • get_bone_global_pose_no_override

    顾名思义,get_bone_global_pose_no_override 忽略任何全局姿势覆盖。没错,您可以覆盖全局姿势。为此,请使用set_bone_global_pose_override。另见clear_bones_global_pose_override。当然,这些都是相对于Skeleton而言的。


    方法Spatial.to_global(vector3)Skeleton 无关。它将向量从您调用它的节点的本地空间转换为世界空间。这也可能有用:

    $Skeleton.to_global($Skeleton.get_bone_global_pose(bone_index).origin)
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2020-09-12
      • 2020-06-28
      • 2022-06-10
      • 2019-08-22
      相关资源
      最近更新 更多