воскресенье, 26 февраля 2012 г.

История импорта анимации из Эверквеста.

Ураааа!!!! После десятка попыток на протяжении нескольких месяцев ковыряний, наконец-то удалось победить скелетную анимацию, импортированную из Эверквеста.

вторник, 21 февраля 2012 г.

Основы VBO в OpenGL. Уроки.

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

Основы VBO в OpenGL. Ссылки по теме.


  1. Часть первая, первый квадрат
  2. Часть вторая, добавляем атрибуты
  3. Часть третья, индексный буфер
  4. Часть четвертая, динамика
  5. Часть пятая, дополнительные возможности
  6. Часть шестая, VAO
  7. Ссылки по теме

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

Основы VBO в OpenGL. Часть шестая, VAO.


  1. Часть первая, первый квадрат
  2. Часть вторая, добавляем атрибуты
  3. Часть третья, индексный буфер
  4. Часть четвертая, динамика
  5. Часть пятая, дополнительные возможности
  6. Часть шестая, VAO
  7. Ссылки по теме

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

Основы VBO в OpenGL. Часть пятая, дополнительные возможности


  1. Часть первая, первый квадрат
  2. Часть вторая, добавляем атрибуты
  3. Часть третья, индексный буфер
  4. Часть четвертая, динамика
  5. Часть пятая, дополнительные возможности
  6. Часть шестая, VAO
  7. Ссылки по теме

Сейчас мы рассмотрим еще пару возможностей работы с вершинными буферами о которых упоминалось в статье, но полное описание которых осталось за кадром, в частности работа с так называемыми Interleaved Arrays и рассмотрим возможность чтения данных из видеопамяти.

Основы VBO в OpenGL. Часть четвертая, динамика


До этого момента мы рассматривали работу со статикой – объектами геометрия которых не изменяется на протяжении выполнения программы, к примеру здание, стол, 3D модель и т.д.
К сожалению не смотря на все свои возможности VBO при работе со статикой проигрывает дисплейным спискам. Каким образом они формируют свой буфер – науке не известно, никакой литературы по этому вопросу я не нашел, а NV лишь ссылается на свою утилиту NVTriStrip, но даже оптимизированный VBO буфер не способен превзойти по скорости дисплейные списки при работе со статикой, особенно низкополигональной и особенно при большом количестве переключений состояний ОГЛ (не исключено что в ближайшем будущем эта ситуация кардинально измениться, но пока тесты говорят об обратном).

Основы VBO в OpenGL. Часть третья, индексный буфер.



  1. Часть первая, первый квадрат
  2. Часть вторая, добавляем атрибуты
  3. Часть третья, индексный буфер
  4. Часть четвертая, динамика
  5. Часть пятая, дополнительные возможности
  6. Часть шестая, VAO
  7. Ссылки по теме

В предыдущих уроках мы для рисования одного четырехугольника использовали 6 вершин, 2 из которых дублировались. Причиной этого было использования для рисования команды glDrawArrays, которая в качестве параметра может принимать только массив вершин, и при выводе считает что идущие друг за другом три вершины формируют треугольник, и изменить этот порядок никак нельзя. Естественно, если вы будете использовать в качестве типа грани GL_QUADS, то один квадрат будет формироваться из 4-х вершин, а в случае GL_TRIANGLE_STRIP – каждая вершина, после первых двух, будет добавлять новый треугольник.
Но данный подход не выгоден по двум причинам – во-первых это перерасход памяти на дублирующиеся вершины, во-вторых – все трансформации в GPU рассчитываются для каждой вершины, в том числе и дублирующейся. В третьих в современных видеокартах есть так называемый Pre-/Post- TnL Cache, суть которого в экономии GPU времени на расчет дублирующихся вершин. Эти проблемы решаются за счет использования так называемого индексного буфера, а технологию иногда называют IBO.