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