Что на самом деле делает mOffsetMatrix в Assimp? - PullRequest
0 голосов
/ 03 мая 2018

Я совершенно уверен, что mOffsetMatrix преобразует вершину из пространства сетки в пространство кости, что подтверждается этим http://assimp.sourceforge.net/lib_html/structai_bone.html

Но потом я увидел это, которое говорит о том, что оно фактически трансформирует вершины из пространства кости в пространство сетки. https://github.com/assimp/assimp/pull/1803

Теперь я очень растерялся. Так что же делает mOffsetMatrix?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вот ответ на ваш вопрос (исходя из решения от ошибки):

это зависит от того, как вы думаете о преобразовании. Если матрица умножения идут после точки (т.е. точка * преобразовывается с точкой будучи вектором «строки»), то имеет смысл сказать, что он преобразует из «пространство сетки в пространство кости», так как оно занимает точку в пространстве сетки и выводит точку в костном пространстве. Но при использовании предварительного умножения матрицы как делает assimp (transform * point с точкой, являющейся вектором "столбца") имеет больше смысла думать об этом как о преобразовании самого пространства, из "костного пространства в сетчатое пространство", после чего точка в сетчатом пространстве может использоваться.

Вот почему оригинальный плакат смущен, потому что они думают об этом в обратном направлении по сравнению с тем, как ассимп трактует точечное преобразование. Это, вероятно, ведет непосредственно к их путанице с разработкой матрица преобразования кости и думая, что это должно быть так же, как mOffsetMatrix, когда на самом деле это обратное.

Это все особенно запутанно, так как DirectX использует постмножение, и OpenGL использует предварительное умножение.

Это все говорит, я надеюсь, что кто-то может обновить документацию так что всем понятно. Это очень сложно указать явно без «официального» мышления о такого рода вещь. Я даже не могу найти документально подтвержденное, как ассимп лечит преобразование матрицы умножения ... хотя матричная запись используется на странице «Структуры данных» документа Assimp подразумевает предварительное умножение с векторами столбцов.

Надеюсь, что это поможет вам.

0 голосов
/ 08 мая 2018

Документация неверна. Поэтому мне нужно обновить наш документ. См. выпуск 1950

...