У меня проблемы с поиском окончательных матриц костей для моего скелета.
Я знаю, что мои матрицы позы привязки работают, и я знаю, что мои матрицы преобразования работают, но я подумал, что их умножение (которое я называю составной матрицей), а затем умножение их на составную матрицу ее родителей (затем на ее родительский родитель и т. достань мне правильную матрицу.
Стоит отметить, что я использую gl-matrix.js в качестве моей математической библиотеки векторов / матриц, математика ее матриц работает в обратном порядке, для получения мировой матрицы требуется PositionMatrix * RotationMatrix * ScaleMatrix, а не наоборот. так что я могу перепутать заказы,
Я пробовал изменить порядок умножения матриц позы привязки и матриц преобразования костей, а также порядок конечной матрицы и родительских матриц, но сейчас я просто поражен.
В любом случае, чтобы обернуть этот вопрос в лук, учитывая сетку, в которой каждая вершина предварительно преобразована в ее относительное пространство костей, каждая кость связывает матрицу позы и каждую матрицу преобразования костей на кадр, как мне найти окончательную матрицу костей?
РЕДАКТИРОВАТЬ:
все еще есть проблемы, но это может помочь сказать, где я нахожусь в данный момент, следующий псевдокод полностью переводит модель в ее позу привязки
finalBones = []
foreach bone in bones
mat = bone.poseMatrix
parent = bone
while (parent.parent != null)
parent = parent.parent
mat *= parent.poseMatrix
finalBones.push(mat)
приведенный выше фрагмент - это именно то, что происходит без необходимости объяснения функций матрицы (его javascript, поэтому он выполняется с помощью таких функций, как mat4.copy и mat4.mul)
Я подумал, сделал ли я что-то вроде
finalBones = []
foreach bone in bones
mat = bone.poseMatrix
mat *= bone.transformMatrix
parent = bone
while (parent.parent != null)
parent = parent.parent
mat *= parent.poseMatrix
mat *= parent.transformMatrix
finalBones.push(mat)
Я бы получил финальную матрицу (и я пробовал использовать transformMatrices перед PoseMatrices), но все, что я получаю, это модель со сломанным позвоночником и вывернутыми наизнанку ногами.
ИЗМЕНИТЬ 2:
Итак, при дальнейшем рассмотрении, матрицы преобразования костей на холостом кадре имеют перевернутые средние 2 строки? странно, но я смотрю, что будет, если я сейчас поменяю их местами