搅拌机:绕着球体走动

Ana*_*ory 57 python blender coordinate-transformation

为了理解blender python游戏脚本,我目前尝试使用此链接中的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()
Run Code Online (Sandbox Code Playgroud)

大致工作,直到任何角度超过180度,然后看起来不连续.我假设这来自rotate_difference是不连续的 - 关于数学类型和实用程序的blender文档没有说什么,我还没有想到四元数表示还没有看到连续映射是否可行 - 我想有更优雅的方式实现局部Z方向是连续的鼠标依赖,而局部X和Y方向依赖于某些给定的向量,但如何?

Mar*_*cin 4

共识似乎是您应该使用四元数来完成这种旋转。

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

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