Присмотрелся к этому коду повнимательнее, попробовал. Ошибок не выдает но почему то lenfaces всегда 0. Поясните пожалуйста что я мог сделать не так.
Выцепил из стороннего кода работу с uv развертками
Новый вопрос. Я получил мэш, собственно тут я все сделал правильно, но в блендере есть также Rotation и Scale для каждого объекта, и у меня мэш приходит без учета этих параметров. Как получить мэш с учтенными Rotation и Scale?
Как извлекать скелетную анимацию?
В каком формате будут данные о скелетной анимации, на выходе?
>>> ob=bpy.data.objects['Armature']>>> action = ob.animation_data.action>>> fcu=action.fcurves>>> for fc in fcu:... print(fc.data_path, "index=", fc.array_index)... pose.bones["Bone"].location index= 0pose.bones["Bone"].location index= 1pose.bones["Bone"].location index= 2pose.bones["Bone"].rotation_quaternion index= 0pose.bones["Bone"].rotation_quaternion index= 1pose.bones["Bone"].rotation_quaternion index= 2pose.bones["Bone"].rotation_quaternion index= 3pose.bones["Bone"].scale index= 0pose.bones["Bone"].scale index= 1pose.bones["Bone"].scale index= 2
>>> for frame in range(10):... print ("кадр=", frame, "x=", fcu[0].evaluate(frame))... кадр= 0 x= 0.0кадр= 1 x= 0.0кадр= 2 x= 0.0018280739895999432кадр= 3 x= 0.007335450500249863кадр= 4 x= 0.016550853848457336кадр= 5 x= 0.029494034126400948кадр= 6 x= 0.046174466609954834кадр= 7 x= 0.06658995151519775кадр= 8 x= 0.09072526544332504кадр= 9 x= 0.1185506209731102
1) Перебирать в цикле все объекты.
for ob in bpy.data.objects: что-то сделать с ob
Узнавать, есть ли в них арматура.
for mod in ob.modifiers.values(): if mod.type == 'ARMATURE': значит mod - это арматура, что-то с ней сделать
3) Если есть, узнать общее количество кадров для этой арматуры, узнать какие из них ключевые.
# amt - объект арматуры, его получение см п.2act=amt.animation_data.action # действия арматуры# в act.frame_range находится 1 и последний кадры этой арматуры
5) Перебирать в цикле все кости арматуры.
#данные по костям в режиме редактирования:# amt - объект арматуры, его получение см п.2amtd=amt.data # данные арматурыfor bone in amtd.bones: что-то делать с костью bone
#данные по костям в режиме позы:for bone in amt.pose.bones: что-то делать с костью bone
fcu=act.fcurves
for mod in ob.modifiers.values(): if mod.type == 'ARMATURE':
amt=mod.object
for mod in ob.modifiers.values(): if mod.type == 'ARMATURE': amt=mod.object
Striver большое спасибо вам за помощь. Подскажите, в чем разница между данными по костям в режиме редактирования и в режиме позы ? И fcu я так понял это собственно и есть анимации, те кривые по которым двигаются кости.
Подскажите, в чем разница между данными по костям в режиме редактирования и в режиме позы ?
Это всего лишь начальные свойства кости.
И fcu я так понял это собственно и есть анимации, те кривые по которым двигаются кости.
fcu[n] - кривая анимации номер n у арматурысписок кривых такой же, как в окне Экспозиционного листа
Не так уж и "всего лишь". Я не представляю, как можно писать движок, не используя эти начальные свойства.