воскресенье, 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.

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


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

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


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

VBO (Vertex Buffer Objects) – технология, позволяющая хранить координаты вершин совместно с их атрибутами в видеопамяти.
В отличии от использования блока glBegin/glEnd, при котором на каждом кадре вся геометрия передается GPU по очень медленной шине PCIEx, при использовании VBO все геометрия загружается в видеопамять только один раз, на этапе инициализации, после чего мы просто ссылаемся на эти данные. Это во-первых позволят существенно разгрузить шину для более важных задач, во-вторых - это приводит к существенному повышению производительности, так как GPU может незамедлительно приступать к рендерингу, не дожидаясь пока будут получены данные от CPU. Ну и пропускная способность видеопамяти в десятки раз выше пропускной способности PCIEx (4Гб/сек против 148Гб/сек), благодаря чему все операции копирования в видеопамяти происходят существенно быстрее чем при загрузке данных со стороны CPU. Используя приведенные выше особенности можно существенно повысить как производительность так и гибкость рендера, но обо всем по-порядку.

понедельник, 20 февраля 2012 г.

Загрузчик Jpeg от Synopse

Как обычно бывает, искал одно а нашел то, что уже второй год ищу))
Вообщем давно пытался найти адекватный загрузчик Jpeg, так как делфийский сильно тормознутый, а сценовский, выдранный из библиотеки GraphicEx, требует за собой таскать кучу объектных файлов.

четверг, 16 февраля 2012 г.

Небольшие изменения в навигации по блогу


По неизвестным мне причинам блог периодически напрочь отказывается открывать главную страницу (и только главную). Отсутствие службы поддержки не позволяет оперативно решить эту проблему, общение в группе blogger'а так же не дало никаких результатов. Как следствие - предлагаю входить на блог "через окно", в виде альтернативной ссылки на опубликованный список статей: http://vbomesh.blogspot.com/p/blog-page_26.html

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

пятница, 10 февраля 2012 г.

Рисуем GUI. Часть вторая, с миру по нитке - нищему на GUI.

В предыдущих статьях мы с вами рассмотрели разные аспекты создания GUI, определились с проблемами и рассмотрели возможные пути их решения, теперь самое время собрать это все в "рубаху".

четверг, 9 февраля 2012 г.

Рисуем GUI. Часть первая, немного тестов.

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