Чтобы понять скрипты для скриптов 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()
который примерно работает, пока какой-либо угол не переместится на 180 градусов, и тогда он выглядит прерывистым. Я предполагаю, что это происходит из-за того, что rot_difference является прерывистым - документация blender по Math-типам и утилитам ничего не говорит, и я еще недостаточно думал о кватернионных представлениях чтобы увидеть, возможно ли непрерывное отображение, и я думаю, что существует более элегантный способ добиться того, что локальная ориентация Z постоянно зависит от мыши, тогда как локальные ориентации X и Y непрерывно зависят от некоторого заданного вектора, но как?