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方向依赖于某些给定的向量,但如何?
共识似乎是您应该使用四元数来完成这种旋转。
请参阅 api:http://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html
有关数学的介绍,请参阅:http://en.wikipedia.org/wiki/Rotation_formalisms_in_ Three_dimensions#Quaternions