Я делаю простую библиотеку анимации костей, но в какой-то момент застрял.
Что у меня есть: Меш с несколькими прикрепленными к нему костями с анимацией. Сетка правильно скинирована. Это файл 3d studio max.
Что я делаю:
Я экспортирую этот скелетный меш с помощью своего плагина. Я беру первый кадр анимации и умножаю каждую вершину на эту матрицу (псевдокод)
Matrix invertedBoneMatrix = ZeroMatrix; invertedBoneMatrix += bone1WorldTransform * weight1; invertedBoneMatrix += bone2WorldTransform * weight2; invertedBoneMatrix += bone3WorldTransform * weight3; invertedBoneMatrix += bone4WorldTransform * weight4; invertedBoneMatrix.Invert(); foreach (vertex) vertex = invertedBoneMatrix * vertex;
Когда я загружаю эту модель в свой движок, я вычисляю преобразования мира для каждой кости в каждом кадре анимации и умножаю каждую вершину на соответствующие преобразования мира костей с соответствующими весами.
Проблема: Только первый кадр выглядит нормально, остальные кадры искажены.
Возможно, у меня где-то в коде есть ошибки, но я хочу знать, правильный ли мой подход - привести все вершины в локальное пространство соответствующих им костей.