Ураааа!!!! После десятка попыток на протяжении нескольких месяцев ковыряний, наконец-то удалось победить скелетную анимацию, импортированную из Эверквеста.
Разработка движка прекращена, исходные коды проекта доступны тут: http://code.google.com/p/glsnewton/
воскресенье, 26 февраля 2012 г.
вторник, 21 февраля 2012 г.
Основы VBO в OpenGL. Уроки.
Так как в последнее время в статьях все чаще упоминается VBO и ссылаюсь на разные тонкости его работы (в последующих статьях его будет еще больше), то решил выложить здесь свой старый цикл уроков по основам VBO.
Основы VBO в OpenGL. Ссылки по теме.
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
В статье я умышленно не приводил синтаксис команд, так как
эту информацию легко можно найти в Интернете, но их описание занимает место в
статье, и читатель теряет ход мысли, пока пытается осознать смысл перевода того
или иного параметра. Так как статья завершена, то самое время познакомить
читателя с более полным описанием данных команд, а так же кодами ошибок
возвращаемыми OpenGL.
Основы VBO в OpenGL. Часть шестая, VAO.
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
В предыдущих уроках я уже упоминал о такой технологии как VAO, позволяющей волшебным образом сократить количество биндов буферов VBO, упростив эту процедуру и сделав код быстрее, давайте теперь подробно разберем что это за зверь и с чем его едят.
Основы VBO в OpenGL. Часть пятая, дополнительные возможности
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
Сейчас мы рассмотрим еще пару возможностей работы с вершинными буферами о которых упоминалось в статье, но полное описание которых осталось за кадром, в частности работа с так называемыми Interleaved Arrays и рассмотрим возможность чтения данных из видеопамяти.
Ярлыки:
уроки,
Interleaved arrays,
OpenGL,
Readback,
VBO
Основы VBO в OpenGL. Часть четвертая, динамика
До этого момента мы рассматривали работу со статикой –
объектами геометрия которых не изменяется на протяжении выполнения программы, к
примеру здание, стол, 3D модель и т.д.
К сожалению не смотря на все свои возможности VBO при работе со статикой
проигрывает дисплейным спискам. Каким образом они формируют свой буфер – науке
не известно, никакой литературы по этому вопросу я не нашел, а NV лишь
ссылается на свою утилиту NVTriStrip,
но даже оптимизированный VBO буфер не способен превзойти по скорости дисплейные списки
при работе со статикой, особенно низкополигональной и особенно при большом количестве переключений состояний ОГЛ (не исключено что в ближайшем будущем эта ситуация
кардинально измениться, но пока тесты говорят об обратном).
Ярлыки:
уроки,
glBufferSubData,
glMapBuffer,
OpenGL,
Updating,
VBO
Основы VBO в OpenGL. Часть третья, индексный буфер.
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
В предыдущих уроках мы для рисования одного четырехугольника использовали 6 вершин, 2 из которых дублировались. Причиной этого было использования для рисования команды glDrawArrays, которая в качестве параметра может принимать только массив вершин, и при выводе считает что идущие друг за другом три вершины формируют треугольник, и изменить этот порядок никак нельзя. Естественно, если вы будете использовать в качестве типа грани GL_QUADS, то один квадрат будет формироваться из 4-х вершин, а в случае GL_TRIANGLE_STRIP – каждая вершина, после первых двух, будет добавлять новый треугольник.
Но данный подход не выгоден по двум причинам – во-первых это
перерасход памяти на дублирующиеся вершины, во-вторых – все трансформации в GPU рассчитываются
для каждой вершины, в том числе и дублирующейся. В третьих в современных
видеокартах есть так называемый Pre-/Post- TnL Cache, суть которого в
экономии GPU времени на расчет дублирующихся вершин. Эти проблемы
решаются за счет использования так называемого индексного буфера, а технологию
иногда называют IBO.
Основы VBO в OpenGL. Часть вторая, добавляем атрибуты.
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
В прошлом уроке мы с вами научились рисовать простейший
примитив с использованием технологии VBO, сейчас самое время добавить к нашему квадрату немного
цвета, делается это через присоединение к VBO еще одного вершинного атрибута, содержащего цвет каждой из вершин.
Основы VBO в OpenGL. Часть первая, первый квадрат
- Часть первая, первый квадрат
- Часть вторая, добавляем атрибуты
- Часть третья, индексный буфер
- Часть четвертая, динамика
- Часть пятая, дополнительные возможности
- Часть шестая, VAO
- Ссылки по теме
VBO (Vertex Buffer Objects) – технология, позволяющая хранить
координаты вершин совместно с их атрибутами в видеопамяти.
В отличии от использования блока glBegin/glEnd, при котором на каждом кадре вся
геометрия передается GPU по
очень медленной шине PCIEx, при использовании VBO все геометрия
загружается в видеопамять только один раз, на этапе инициализации, после
чего мы просто ссылаемся на эти данные. Это во-первых позволят
существенно разгрузить шину для более важных задач, во-вторых - это
приводит к существенному повышению производительности, так как GPU может
незамедлительно приступать к рендерингу, не дожидаясь пока будут
получены данные от CPU. Ну и пропускная способность видеопамяти в
десятки раз выше пропускной способности PCIEx (4Гб/сек против
148Гб/сек), благодаря чему все операции копирования в видеопамяти
происходят существенно быстрее чем при загрузке данных со стороны CPU.
Используя приведенные выше особенности можно существенно повысить как
производительность так и гибкость рендера, но обо всем по-порядку.
понедельник, 20 февраля 2012 г.
Загрузчик Jpeg от Synopse
Как обычно бывает, искал одно а нашел то, что уже второй год ищу))
Вообщем давно пытался найти адекватный загрузчик Jpeg, так как делфийский сильно тормознутый, а сценовский, выдранный из библиотеки GraphicEx, требует за собой таскать кучу объектных файлов.
Вообщем давно пытался найти адекватный загрузчик Jpeg, так как делфийский сильно тормознутый, а сценовский, выдранный из библиотеки GraphicEx, требует за собой таскать кучу объектных файлов.
четверг, 16 февраля 2012 г.
Небольшие изменения в навигации по блогу
По неизвестным мне причинам блог периодически напрочь отказывается открывать главную страницу (и только главную). Отсутствие службы поддержки не позволяет оперативно решить эту проблему, общение в группе blogger'а так же не дало никаких результатов. Как следствие - предлагаю входить на блог "через окно", в виде альтернативной ссылки на опубликованный список статей: http://vbomesh.blogspot.com/p/blog-page_26.html
Опубликованные статьи были сгруппированы по тематике и ссылки на эти группы так же были вынесены в "боковые страницы" для упрощения доступа. Группы статей со временем будут пополняться новым материалом, так что это в дальнейшем упростит навигацию и позволит вести обсуждение всего цикла статей.
пятница, 10 февраля 2012 г.
Рисуем GUI. Часть вторая, с миру по нитке - нищему на GUI.
В предыдущих статьях мы с вами рассмотрели разные аспекты создания GUI, определились с проблемами и рассмотрели возможные пути их решения, теперь самое время собрать это все в "рубаху".
четверг, 9 февраля 2012 г.
Рисуем GUI. Часть первая, немного тестов.
В предыдущих статьях я уже рассказывал о проблемах связанных с выводом низкополигональных объектов, таких как текст, спрайты или элементы GUI. В этой статье я предложу одно интересное решение данной проблемы, позволяющее обойти эти проблемы, сведя рисование самого сложного GUI до одной команды рисования.
Подписаться на:
Сообщения (Atom)