搅拌器:在球体周围走动

为了理解搅拌机python游戏脚本,我目前尝试构build一个场景,在这个场景中可以使用这个链接中的FPSController结构来绕过一个球体。 对于重力和FPSController的方向,我试图构build一个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() 

它大致可以工作,直到任何angular度超过180度,然后看起来不连续。 我假设这是来自rotation_difference是不连续的 – 关于mathtypes和实用工具的搅拌器文档没有说什么,我还没有足够的关于四元数表示的想法,但看看是否有可能连续的地图 – 我想有一个更优雅的方式为了实现局部Z方向不断依赖鼠标,而本地X和Y方向不断依赖于某个给定的vector,但是如何?

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

    看到这个api: http : //www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html

    请参阅以下math介绍: http : //en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternions

    有一个allign函数。 如果游戏对象被称为自己,它应该是像own.alignAxisToVect(vector, 2, 1)其中2是Z轴的索引(x = 0,y = 1,z = 2),1是调整速度(介于0和1之间)