У меня есть программа на C ++ / OpenGL, которая создает много цилиндров при различных оборотах, поэтому все они выглядят связанными. Я добавил метод экспорта, чтобы написать скрипт на Python с теми же методами рисования для Maya, чтобы я мог загрузить скрипт.
Я знаю, что когда OpenGL создает и вращает цилиндр, он выравнивает его по оси Z а также он вращается и переводится как «основа».
Поэтому я был осторожен в своем преобразовании Maya, перемещая опорные точки перед любыми преобразованиями, а также, чтобы выровнять цилиндры в соответствии со стандартом OpenGL (и затем заморозить преобразование, создавая таким образом основу OpenGL).
Кажется, что все переводы перемещаются в правильное место, но я беспокоюсь, правильно ли я выполняю преобразование между функциями вращения. Я понимаю, что и Maya, и OpenGL вращаются в градусах. Тем не менее, функция в OpenGL:
glRotated(angle, x, y, z);
И в Питоне Майи:
cmds.rotate(x-deg, y-deg, z-deg);
Так что я занимаюсь угол из OpenGL и умножая его на заданную ось для метода Maya:
cmds.rotate(angle * x, angle * y, angle * z);
Я подумал, что это сработает и даст мне то, что я хочу. но повороты все еще кажутся выключенными. Я не могу найти хорошее объяснение погоды или нет мог работать так, как я ожидаю. Так кто-нибудь может подтвердить эти отношения?
Это не будет работать в целом, только если ось вращения выровнена с одной из главных осей.
Ваше вращение задается как ось + угол, и вам нужно преобразовать его в углы Эйлера. Вы можете сделать это вручную после прочтения, например, в Википедии, или вы можете создать MQuaternion, используйте метод setAxisAngle () (использует радианы, а не градусы), а затем конвертируйте его в MEulerAngle.
Других решений пока нет …