OpenGL немедленный режим против VBO для анимированных моделей - PullRequest
1 голос
/ 15 марта 2012

Справочная информация: Я работаю над игрой opengl для удовольствия / опыта, и в надежде выпустить небольшую независимую игру однажды. Мои навыки OpenGL по-прежнему очень ограничены, и мои знания не выходят далеко за пределы непосредственного режима OpenGL и отображения списков.

В настоящее время я визуализирую свои анимированные модели непосредственно в немедленном режиме (после загрузки из файла ms3d). На довольно большой / сложной местности я могу загружать и рендерить только около 20 анимированных моделей, состоящих из более или менее 200 треугольников (также с отображением текстуры). Поскольку моя единственная цель - узнать больше о программировании и разработке игр, я чувствую, что для меня важно изучить VBO (объект буфера вершин), но, поскольку я студент, у меня довольно мало времени. Я предпочел бы потратить свое время на реализацию большего количества вещей, чем на изучение чего-то потенциально трудного (я, конечно, займусь этим в следующий отпуск).

Мой вопрос: Стоит ли изучать VBO и менять загрузчик и рендерер модели на использование VBO вместо вызовов в непосредственном режиме? Будет ли это более эффективным? Я имею в виду такие игры, как Left4Dead и т. Д., Где у вас может быть много детализированных моделей (и хотя я не стремлюсь быть в одной лиге, мне бы хотелось несколько советов, как улучшить). Я решил не использовать списки отображения, так как он должен быть реконструирован каждый кадр. Не будет ли это применимо к VBO?

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Стоит ли изучать VBO и изменять загрузчик и средство визуализации модели для использования VBO вместо вызовов в непосредственном режиме?

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

Независимо от версии OpenGL, которые вы используете, шейдеры заслуживают изучения - GLSL доступен начиная с OpenGL 2.0 и довольно мощный.

В любом случае, если вы заинтересованы в использовании OpenGL / шейдеров, возможно, вы захотите скачать и изучить NVIdia OPenGL SDK.Он содержит интересные примеры, например, анимацию скиновой модели с использованием вершинных шейдеров и списков отображения.

Я решил не использовать списки отображения, так как их нужно будет восстанавливать каждый кадр.

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

1 голос
/ 16 марта 2012

Как всегда с технологиями, дела пошли дальше. Похоже, вы используете архитектуру фиксированных функций OpenGL2 (или более ранней). Современный OpenGL (до 4.x) использует программируемые конвейеры (известные как шейдеры). Возможно, вы захотите взглянуть на новые API OpenGL, их не так сложно изучить (есть много материала в Интернете), и вы можете проявить творческий подход к визуализации моделей.

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

1 голос
/ 16 марта 2012

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

Сложно сказать, даст ли он вам ускорение или нет, поскольку мы не знаем точно, что вы пытаетесь сделать или на каком оборудовании, но подумайте об этом так: вы можете загружать статические данные (например, пейзаж, если он не деформируется) на карту один раз и не перезагружать ее снова. Это означает, что сотни или тысячи вершин вы не пересылаете каждый кадр. Это обычно довольно значительная победа. Если вы используете MacOS X, я нашел эту страницу очень полезной. Это, вероятно, полезно, даже если вы не используете OS X, поскольку в примерах кода нет ничего специфичного для Mac.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...