Добавляем мультипоточность

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

Динамическое перестроение границ.

Код 3D движка TrickRig обеспечивает динамическое перестроение данных в графической памяти (OpenGL VAO), из которых рендерится сцена:
- данные для рендера объектов, которые при перемещении камеры попадают в область видимости, в фоновом режиме подгружаются в VAO;
- ячейки графической памяти с данными, которые вышли за границы области видимости, исключаются из рендера и становятся доступными для записи новых данных.

Октодерево и воксели

В разрабатываемом графическом движке одной из базовых возможностей должна стать техника "Level of Detail" (LOD) - изменение детализации 3D-объектов при изменении расстояния до наблюдателя. Без этого невозможно обеспечить онлайн-прорисовку открытого пространства c сохранением приемлемого FPS.

Новая модель

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

Графическая библиотека

buttons

Целый месяц ушел на поиск и изучение свободных библиотек для создания элементов графического интерфейса. Перебрал наверно десятка два различных библиотек - собирал, изучал документацию, тестировал. В результате, по моему мнению, самой продвинутой и удобной для создания интерфейсов является связка из gtkmm и GTK+. Если бы я разрабатывал мультиплатформенное графическое приложение, без использования OpenGL, то остановил бы свой выбор именно на gtkmm. Правда, должен заметить, что в этот раз я не исследовал QT.

Tags: 

Allegro

Занялся поиском библиотеки виджетов для настройки графического интерфейса. Пересмотрел несколько библиотек и неожиданно вышел на библиотеку Allegro. Довольно интересная разработка, своего рода "Швейцарский нож" - мультиплатформенная, есть поддержка нативных диалоговых окон, загрузки файлов, мультимедиа и даже OpenGL. Не верилось, но выходило, что можно исключить из проекта сразу несколько библиотек заменив все одним Allegro.

Продолжение работы

После летнего перерыва работа возобновилась. Закономерно, что перерыв дает возможность отвлечься от работы над деталями исходного кода и рассмотреть проект в целом. Еще раз проанализировать общую идею, состав, логику работы и структуру проекта.

Графический движок

Это конечно круто и увлекательно - писать собственый графический движок. Но чем дольше я этим занимаюсь, тем больше возникает ощущение, что "изобретаешь велосипед". Надо поработать с популярными графическими движками - изучить их устройство и работу. Сейчас, когда уже понятны принципы работы c OpenGL, самое время посмотреть - "а как там у них?".

Работа с Clang

Поработал немного с Clang. Впечатление неоднозначное - есть моменты, которые не до конца понятны. Несомненный плюс Clang - это удобная интеграция со средствами разработки для анализа кода. Я даже сделал попытку перейти от использования среды Vim+GCC на Emacs+Clang.

Рендер во фреймбуфер

render TTF

Преодолена еще одна ступенька в процессе развития проекта - реализован рендер во фреймбуфер. Теперь стало понятно, как сравнительно простыми средствами реализовать курсор и HUD в 3D окне.

Достаточно просто решилась задача написания обертки к библиотеке Freetype для работы с текстом. Теперь можно рендерить надписи на экране в произвольном месте почти без снижения быстродействия.

Страницы

Подписка на TRICKRIG RSS