【问题标题】:Blender: Walk around sphere搅拌机:在球体周围走动
【发布时间】:2012-08-07 22:22:49
【问题描述】:

为了理解blender python 游戏脚本,我目前尝试使用this link 的FPSController 结构构建一个可以绕球体行走的场景。对于重力和 FPSController 方向,我尝试构建一个 python 控制器,目前看起来像这样:

def main():
    print("Started")

    controller = bge.logic.getCurrentController()
    me = controller.owner

    distance, loc, glob = me.getVectTo((0,0,0))

    grav = controller.actuators['Gravity']

    strength = me['Gravity']
    force = strength*(distance*distance)*glob

    grav.force = force

    try:
        rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix()
    except Exception as E:
        print(E)
        rot = (0,0,0)

    rotZ = me.orientation
    me.orientation = rot*rotZ

    controller.activate(grav)

main()

它大致有效,直到任何角度超过 180 度,然后看起来不连续。我认为这是因为rotation_difference 不连续——blender documentation on Math Types & Utilities 没有说什么,而且我对四元数表示还没有充分考虑到是否可以使用连续映射——我想有一种更优雅的方式来实现这一点局部 Z 方向持续依赖于鼠标,而局部 X 和 Y 方向持续依赖于某个给定向量,但如何?

【问题讨论】:

  • 3D 空间中的旋转可能非常困难。在我看来,最简单的方法就是花时间理解四元数,然后改用它们。
  • 如果使用欧拉角(而不是四元数),您可能会遇到的问题之一是万向节锁定 (en.wikipedia.org/wiki/Gimbal_lock),这可能会导致相当多的问题
  • 安装 Blender 后是否可以轻松尝试? (不是 Blender 专家)
  • 到 FPSController 结构的链接不再起作用。你有镜子吗?

标签: python blender coordinate-transformation


【解决方案1】:

大家的共识似乎是你应该使用四元数来完成这样的旋转。

请参阅此 api:http://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html

有关数学的介绍,请参阅此:http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternions

【讨论】:

    【解决方案2】:

    有一个对齐功能。如果游戏对象被称为自己的,它应该类似于own.alignAxisToVect(vector, 2, 1),其中 2 是 Z 轴的索引(x=0,y=1,z=2),1 是对齐速度(介于 0 和1)

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2016-01-19
      • 2012-11-15
      • 2012-06-17
      • 2017-04-21
      • 1970-01-01
      相关资源
      最近更新 更多