Автор Тема: Небходима помощь по написанию экспрта в свой формат на языке Python.  (Прочитано 1912 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Striver

  • Житель
    • http://striver00.ru
Цитировать
Подскажите, где можно внятно почитать об понятии кривой в Blender?

http://b3d.mezon.ru/index.php/Blender_Basics_4-rd_edition/Chapter_9-_Animation_Basics
https://docs.blender.org/manual/en/dev/editors/graph_editor/index.html

Кривая анимации - общее понятие для любой анимационной системы. оно есть в Майе, Максе, Синьке, и даже в двумерных редакторах.

Цитировать
просто узнать положение и поворот кости в определённый кадр?

Для кривой n и кадра k численное значение координаты такое:
fcu[n].evaluate(k)
выбирай все кривые, относящиеся к нужной тебе кости и смотри их координаты.

Оффлайн Bulbash

  • Житель
Подскажите, а описанная выше data_path  это тип данных строка, получается чтобы узнать к какой кости такое относиться кривая,что это вообще за данные (поворот, позиция или маштаб), надо просто выцеплять это из строки? Есть другой метод понять что это за данные?

Оффлайн Striver

  • Житель
    • http://striver00.ru
Цитировать
надо просто выцеплять это из строки?
Ну я таки вас умоляю, Питон - один из удобнейших языков для работы со строковыми данными. А тут и работы-то никакой не нужно, весь разбор в трёх строчках кода.
Вот пример для 0-й кривой, в цикле можно аналогично для энной сделать:
dp=fcu[0].data_path
skobka2=dp.find('"]')
bone=dp[12:skobka2]
napravlenie=dp[skobka2+3:]

print("кость=", bone, "   направление=",    napravlenie)

у меня выдало
кость= Bone    направление= location

Цитировать
Есть другой метод понять что это за данные?
Может, и есть, но мне про него неизвестно.

Оффлайн Bulbash

  • Житель
Вопрос по ключевым кадрам. fcu[0].keyframe_points  - это массив ключевых кадров для данной кривой. Можно ли узнать из fcu[0].keyframe_points[0] какой это кадр по номеру? Если да, то как?

Оффлайн Striver

  • Житель
    • http://striver00.ru
Цитировать
Можно ли узнать из fcu[0].keyframe_points[0] какой это кадр по номеру?
у этого объекта есть свойство .co, которое выдаёт вектор  (кадр, координата)

>>> kf0=fcu[0].keyframe_points[0]
>>> kf0.co
Vector((1.0, 0.0))

Честно говоря, мне было бы лень разбираться с ключевыми кадрами. Тут кроме координат и номеров кадров нужно выяснять тип интерполяции, а потом в движке эту интерполяцию воспроизводить. Ведь кривая может быть линейной, скруглённой, или ступенчатой.
Проще тупо взять все координаты всех кадров (не думая, какие из них ключевые) с помощью fcu[n].evaluate(frame)) . Но так, конечно же, размер экспортированного файла вырастет.

Оффлайн Bulbash

  • Житель
Подскажите, когда пытаюсь выгрузить поворот выгружается не правильно. Дело видимо в том, что я в DX пользуюсь системой координат отличной от Blender (Y и Z поменяны местами),я попробовал просто в кватернионе их также поменять местами, но возникли проблемы, ротация вокруг Z (DX система), происходит не правильно и больше похожа на ротацию вокруг Y. Как грамотно рассчитать кватернион под мою систему координат?

Оффлайн Striver

  • Житель
    • http://striver00.ru
Цитировать
Дело видимо в том, что я в DX пользуюсь системой координат отличной от Blender
Ну, если ты пишешь свой собственный движок, то, по идее, должен в таких вещах разбираться... Помнится, в Ogre3D я запарился, но разобрался с этими кватернионами. Не знаю, отличается ли это от DX (про него ничего не знаю).

В Огре оси поставлены так:
 x - слева-вправо
 y - снизу-вверх
 z - от камеры (от пользователя) - вглубь экрана

При такой постановке осей в экспортёре Огра сделано так:
mathutils.Quaternion( [ vec.w, vec.x, vec.z, -vec.y] )

Не, знаю, поможет ли тебе чем-то, но это всё, что я сейчас про это могу сказать. Может, кто-нибудь тут ещё может ответить...

Оффлайн Bulbash

  • Житель
Подскажите, может можно, получить поворот кости в определенный кадр не в виде кватерниона, а в виде углов поворота вокруг осей (углов Эйлера)?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... посмотри пример вот в этой темке, там углы Эйлера ...
http://blender-3d.ru/forum/index.php/topic,1756.msg25181.html#msg25181
Код: python [Выделить]

def rot_bone(name,bone_name,axis,angle):
    ob = bpy.data.objects[name]
    bone = ob.pose.bones[bone_name]
    bone.rotation_mode = 'XYZ'
    bone.rotation_euler.rotate_axis(axis, math.radians(angle))
Для Кота

Оффлайн Bulbash

  • Житель
sungreen,
 не понятно, а где вы указываете из какого кадра извлекаются углы поворотов?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... в этом примере нет кадровки, тебе из этого нужен только код rot_bone ...
Для Кота

Оффлайн Bulbash

  • Житель
Эта же функция (rot_bone), просто доворачивает кость, а мне нужно получить поворот кости в определенный кадр не в виде кватерниона а в виде углов поворота.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... имеется ввиду прочитать или записать углы? ...
... там во втором примере код ...
def rot_bone(name,bone_name,xyz_euler_angle):
    ob = bpy.data.objects[name]
    bone = ob.pose.bones[bone_name]
    bone.rotation_euler = xyz_euler_angle

... то есть если записать, то bone.rotation_euler = xyz_euler_angle , а если читать - xyz_euler_angle = bone.rotation_euler ...


 
Для Кота

Оффлайн Samovar

  • Житель
  • Пятигорье
Цитировать
не в виде кватерниона а в виде углов поворота.
а проблем потом не возникнет?
https://ru.wikipedia.org/wiki/Складывание_рамок


¯\_(ツ)_/¯

 

* По форуму

* Последние вложения

Sizes.jpg
Скачано: 7
Автор: Dmi3ryd
paticles.jpg
Скачано: 3
Автор: Dmi3ryd
Снимок 1.PNG
Скачано: 3
Автор: atmk
Снимок.PNG
Скачано: 3
Автор: atmk
Screw.jpg
Скачано: 6
Автор: Dmi3ryd