Доступ к вращению объекта блендера - PullRequest
1 голос
/ 25 марта 2011

Я только начинаю с Blender и Python и пытаюсь получить доступ к свойствам вращения куба с помощью игрового движка Blender с Python 2.5.1

У меня есть сценарий python, прикрепленный к кубу в моей сцене:

cont = GameLogic.getCurrentController()
own = cont.owner

print own.RotX, own.RotY, own.RotZ

Я получаю только эту ошибку:
Ошибка скрипта Python от контроллера "cont # CONTR # 1": Traceback (последний вызов был последним): Файл "стартер", строка 4, в AttributeError: у объекта 'KX_GameObject' нет атрибута 'RotX'

Кто-нибудь может сказать мне, как я могу получить доступ к свойствам вращения? чувствую, что я схожу с ума!

Спасибо,
Будет

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Вы можете использовать свойство localOrientation, которое, по-видимому, является единственным способом доступа к вращению в игровом движке без использования исполнительного механизма движения, который не позволяет печатать текущий оборот.

localOrientation состоит изсписок списков или матрица 3х3.каждая строка матрицы - это точка, на которую будет указывать соответствующая ось.Для куба по умолчанию:

import GameLogic
cont = GameLogic.getCurrentController()
own = cont.owner

print(own.localOrientation)

даст матрицу ((1,0, 0,0, 0,0), (0,0, 1,0, 0,0), (0,0, 0,0, 1,0)), поскольку ось x объекта указываетк точке (1, 0, 0), а y указывает на (0, 1, 0), от z до (0, 0, 1)

надеюсь, что это поможет!

РЕДАКТИРОВАТЬ: просто поиграл с этим, и я хотел бы сказать, что если что-то будет странно, помните, что это МЕСТНАЯ ориентация.Проверьте местное местоположение объекта, если что-то не работает правильно!Я просто сильно смутился, потому что я не понимал, что мой объект имел локальную позицию (0,0,0), хотя он выглядел так, как будто был (9, -10,0)

1 голос
/ 25 марта 2011

Насколько я помню, вы можете получить доступ к свойствам поворота с помощью функции getDRot (), где getDRot () [0] = rotX, getDRot () [1] = rotY, getDRot () [2] = rotZ. Но я не уверен, что вы можете вызвать его на объекте владельца. Из некоторых фрагментов, которые я написал давным-давно, я вызываю эту функцию на приводе. Таким образом, ваш мяч должен иметь привод, и тогда вы можете

import GameLogic
cont = GameLogic.getCurrentController()
moveAct = cont.getActuator("move") # or the name you gave it
rotX = moveAct.getDRot()[0]
#etc
...