Как проанализировать файл bvh для модели скелета, созданной в OpenGL? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь проанализировать данные bvh для моего скелета, который я уже разработал с OpenGL.Есть одна вещь, касающаяся анализа данных, о которой мне стало любопытно.

Данные Bvh состоят из двух частей: ИЕРАРХИЯ и ДВИЖЕНИЕ.HIERARCHY определяет древовидную структуру и данные OFFSET, которые используются для определения длины родительской кости.MOTION определяет положение корневой кости и конфигурации суставов каждой кости.

Я уже сделал свою модель с костями, которые были упомянуты в ИЕРАРХИИ.Я сделал свою модель под той же древовидной структурой, что и в HIERARCHY.(Конечно, длина между костями установлена ​​мной произвольно, поскольку модель создается до анализа данных файла. Таким образом, длина моделируемой кости на самом деле немного отличается от данных OFFSET.)

Поскольку я уже сделалмодель, которую я хочу анимировать, означает ли это, что я могу игнорировать часть HIERARCHY (= OFFSET) и просто читать часть данных MOTION для получения конфигурации каждого соединения?

Я чувствую, что это действительноочевидный вопрос, но что-то кажется неправильным, потому что это означает, что я могу игнорировать первую половину (ИЕРАРХИЯ) файла и просто создать парсер для второй половины.

Есть ли какие-либо детали, которые я, возможно, упускаю из первой половины файла?Любая помощь будет оценена.Заранее спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

BVH HIERARCHY содержит начальную позу скелета (без каких-либо данных MOTION).Таким образом, OFFSET фактически определяет начальную ориентацию каждой кости.Если вы проигнорируете это, вы потеряете синхронизацию между BVH и вашей сеткой.То, что вам нужно сделать, это:

  1. разбор целых HIERARCHY структура
  2. для каждого преобразования кости с масштабом, который выравнивает вашимеш до начальной позиции BVH

    это не так просто, как кажется, поскольку у вас есть две конечные точки для каждой кости в BVH.Но для правильного положения сетки этого недостаточно, так как отсутствует вращение вокруг оси кости.Шкала представляет собой простое соотношение между костью BVH и размером ячейки сетки.

    Вам нужно построить однородные матрицы 4x4.Вот несколько идей о том, как:

  3. разбор всего MOTION данных

  4. для каждого кадра

    вычислите матрицы трансформации достигающей кости и примените ее к своей сетке (вместе с матрицами начального положения).

Я настоятельно рекомендую разобрать / воспроизвести BVH без сетки, используя только линии.И переходите на следующий уровень, только если он работает правильно.Потому что в зависимости от используемых порядков умножения матриц и систем координат у вас может быть искаженный вывод.Что бы вам было трудно отлаживать материал поверх него.

Осторожно, повороты должны выполняться в определенном порядке и без смещения !!!

[edit1]

Вот небольшой пример BVH:

HIERARCHY
ROOT Hips
{
    OFFSET  0.00    0.00    0.00
    CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
    JOINT Chest
    {
        OFFSET   0.00    5.21    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT Neck
        {
            OFFSET   0.00    18.65   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT Head
            {
                OFFSET   0.00    5.45    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00    3.87    0.00
                }
            }
        }
        JOINT LeftCollar
        {
            OFFSET   1.12    16.23   1.87
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT LeftUpArm
            {
                OFFSET   5.54    0.00    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                JOINT LeftLowArm
                {
                    OFFSET   0.00   -11.96   0.00
                    CHANNELS 3 Zrotation Xrotation Yrotation
                    JOINT LeftHand
                    {
                        OFFSET   0.00   -9.93    0.00
                        CHANNELS 3 Zrotation Xrotation Yrotation
                        End Site 
                        {
                            OFFSET   0.00   -7.00    0.00
                        }
                    }
                }
            }
        }
        JOINT RightCollar
        {
            OFFSET  -1.12    16.23   1.87
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT RightUpArm
            {
                OFFSET  -6.07    0.00    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                JOINT RightLowArm
                {
                    OFFSET   0.00   -11.82   0.00
                    CHANNELS 3 Zrotation Xrotation Yrotation
                    JOINT RightHand
                    {
                        OFFSET   0.00   -10.65   0.00
                        CHANNELS 3 Zrotation Xrotation Yrotation
                        End Site 
                        {
                            OFFSET   0.00   -7.00    0.00
                        }
                    }
                }
            }
        }
    }
    JOINT LeftUpLeg
    {
        OFFSET   3.91    0.00    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT LeftLowLeg
        {
            OFFSET   0.00   -18.34   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT LeftFoot
            {
                OFFSET   0.00   -17.37   0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00   -3.46    0.00
                }
            }
        }
    }
    JOINT RightUpLeg
    {
        OFFSET  -3.91    0.00    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT RightLowLeg
        {
            OFFSET   0.00   -17.63   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT RightFoot
            {
                OFFSET   0.00   -17.14   0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00   -3.75    0.00
                }
            }
        }
    }
}
MOTION
Frames:    2
Frame Time: 0.033333
 8.03    35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   
 7.81    35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00    

А вот предварительный просмотр:

preview

слеваэто скелет без применения MOTION данных (чистые смещения), так как вы можете видеть, что он не выровнен по оси (но находится недалеко от него), кости не находятся в одной плоскости и немного повернуты.Но вы должны принять во внимание, что начальная конфигурация и положение могут быть любыми.

Справа находится предварительный просмотр с примененными преобразованиями первого кадра из MOTION данных.

...