Live
Доделал экспорт.
Спеку дополнил, кстати, вот она:
10 байт - название формата
2 байта - номер версии
2 байта - длина служебной строки
сама служебная строка
2 байта - кол-во объектов
ОБЪЕКТЫ
// Общая инфа
2 байта - флаги (1 - имеет геометрию, 2 - заскиннен)
2 байта - количество чайлдов
2 байта - длина имени объекта
само имя объекта
2 байта - кол-во сурфейсов
// Трансформации
// Позиция
4 байта - X
4 байта - Y
4 байта - Z
// Поворот
4 байта - quat.x
4 байта - quat.y
4 байта - quat.z
4 байта - quat.w
// Масштаб
4 байта - Масштаб X
4 байта - Масштаб Y
4 байта - Масштаб Z
(ЕСЛИ ЗАСКИНЕН)
2 байта - количество костей в системе.
КОСТИ
2 байта - длина имени кости
само имя кости
(КОНЕЦ ЕСЛИ ЗАСКИНЕН)
СУРФЕЙСЫ
4 байта - число вершин
4 байта - число индексов
ВЕРШИНЫ
4 байта - X
4 байта - Y
4 байта - Z
4 байта - U
4 байта - V
4 байта - W
4 байта - NX
4 байта - NY
4 байта - NZ
(ЕСЛИ ЗАСКИНЕН)
2 байта - id кости в системе 0
2 байта - id кости в системе 1
2 байта - id кости в системе 2
2 байта - id кости в системе 3
4 байта - вес кости 0
4 байта - вес кости 1
4 байта - вес кости 2
4 байта - вес кости 3
(КОНЕЦ ЕСЛИ ЗАСКИНЕН)
ИНДЕКСЫ
4 байта - первая вершина
4 байта - вторая вершина
4 байта - третья вершина
Атрибут "isSkinned" переехал в самое начало и превратился во флаги. Теперь он несёт в себе аж 2 флага (в дальнейшем добавим ещё):
1. имеет ли геометрию?
2. заскиннен ли?
Если не имеет геометрию, то вместо mesh создаётся pivot.
Также в экспортёре сделал галку, переключающую экспорт костей как мешей.
На финальном скрине вы видите, что кости скрыты. Возможность их экспортить в виде мешей всё же оставил, мало ль кому надо? Обратная совместимость опять обосралась, ну да и ладно.
За сим я торжественно объявляю, что моя работа с анимацией и скелеткой на данном этапе завершена! Конечно, ещё есть что поделать (в частности, у меня навящевая мысль, что веса некорректно развешиваются), но я придерживаюсь принципа "необходимого минимума". Осталось добить 2Д и спрайты, за одно из этих дел я вскоре возьмусь.
Ура, товарищи!