Как загрузить модель один раз и повторно использовать ее в OpenGL - PullRequest
3 голосов
/ 18 апреля 2011

Я загрузил файл модели волнового фронта (.OBJ и .MTL) и сохранил вершины / индексы в VBO для рендеринга. Теперь я только заполняю VBO один раз, когда модель загружена. Мой вопрос ... Каков наилучший способ повторно использовать эти данные вершин для перерисовки нескольких экземпляров модели? В данный момент я просто сохраняю матрицу преобразования (вращение, масштабирование и перемещение) для каждого экземпляра модели и вызываю функцию draw() для каждого экземпляра с соответствующей матрицей преобразования.

Это совершенно неправильный способ сделать это? Какие есть лучшие / альтернативные способы достижения того же результата?

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

Надеюсь, мои разговоры имеют смысл ...

1 Ответ

4 голосов
/ 18 апреля 2011

Если вы просто хотите изменить положение модели, изменение матрицы преобразования - разумный способ сделать это.В более поздних версиях OpenGL вы можете использовать инстансированное рисование для многократного рендеринга модели с различными преобразованиями в одном вызове и, возможно, получить немного больше производительности, но цикл, который просто меняет матрицу преобразования каждый раз, является хорошим началомpoint.

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

...