Подтвердить что ты не робот

Блендер: Прогулка вокруг сферы

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

4b9b3361

Ответ 2

Существует функция allign. Если игровой объект называется собственным, он должен быть чем-то вроде own.alignAxisToVect(vector, 2, 1), а 2 - индексом для оси Z (x = 0, y = 1, z = 2), а 1 - скоростью привязки (между 0 и 1)