Как анимировать 3d-модель (сетка) в OpenGL?

Я хочу анимировать модель (например, человека, идущую) в OpenGL. Я знаю, что есть такие вещи, как скелет-анимация (с сложной математикой), но как насчет этого....

  • Создайте модель в Blender
  • Создайте скелет для этой модели в Blender
  • Теперь сделайте анимацию в Blender с этой моделью и скелетом
  • Возьмите несколько "ключевых кадров" этой анимации и экспортируйте каждый "ключевой фрейм" как одну модель (например, как файл obj)
  • Создайте загрузчик файлов OBJ для OpenGL (чтобы получить данные о вершинах, текстурах, нормалях и лицах)
  • Используйте VBO для рисования этой анимированной модели в OpenGL (и получите несколько сложных идей о том, как изменить текущий "ключевой фрейм" /модель в VBO... возможно, что-то с glMapBufferRange

Хорошо, я знаю, что эта идея немного меньше script, но стоит ли смотреть дальше? Что является хорошей концепцией для изменения "keyFrame" /моделей в VBO?

Я знаю, что проблема с памятью, но с небольшими моделями (и не слишком много анимаций) это может быть сделано, я думаю.

Ответ 1

Да, метод, о котором вы говорите, был очень популярен в ранних 3D-играх (землетрясение и т.д.).

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

Для этого потребуется только один (потоковый или динамический) VBO. В каждом кадре вы найдете предыдущий и следующий ключевые кадры, интерполируете вершины и загружаете результат в VBO.

Фактически вы можете настроить blender для экспорта каждого кадра сцены в виде OBJ. Пользовательский инструмент затем может скомпилировать эти файлы в хороший формат анимации.

Читайте здесь: