Блендер :Обход сферы

Чтобы понять скрипты игры 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 постоянно зависели от некоторого заданного вектора, но как?

57
задан Ranjit 12 August 2013 в 12:20
поделиться