ЛЕНТА СОБЫТИЙ
Обновление MSYS2
Если ваш MSYS2
давно не обновлялся, то при выполнении стандартной команды обновления
$ pacman -Syyu
могут возникнуть сложности с сертификатами. Эта ситуация возникла после обновления продукта в июне 2020 г. Как написано на странице новостей сайта разработчика (Гугль-перевод):
… Алексей уходит с должности главного упаковщика, на его место назначены два новых упаковщика …
По этой причине состав сертификатов изменился и это создало проблему при обновлении среды. Впрочем, проблема решаемая -... [ продолжение ]
Переезд на GitHub
Как всегда, внезапно и по непонятной причине сайт проекта снова заглючил. Не спасло то, что для управления контентом использовалась ОченьПопулярнаяКрутаяCMS. На восстановление работы пришлось потратить пару часов. Стало очевидно, что пришло время обновиться. Как выяснилось, последняя версия моей CMS
у разработчика опережает используемую на сайте уже на два “поколения” (в смысле минорного номера версии). Апгрейд оказался технически невозможен, попытка мигрировать занчилась провалом - оказалось, что работа движка завязана на конкретную версию РНР
, а используемая на моем...
[ продолжение ]
Дополнительное время
Из-за пандемии короновируса появилась свободная неделя для работы. Удалось “довести до ума” код разделения на потоки. В ближайших планах - настройкаграфического интерфейса в основной сцене, работа с шейдерами для управления настройками рендера теней и источников света.
Кроме перечисленного, планируется добавить ещё один или два уровня LOD для тестирования и разработки элементов интерфейса для работы с разными уровнями.
Добавляем мультипоточность
В общем, теоретически, вопрос с детализацией уровней (LOD) решен. Теперь надо реализовать все это в коде движка. Впрочем, реализация не кажется мне слишком сложной, если не считать возникающих проблем с быстродействием. Вот для их решения пора перестраивать схему работы движка для использования многопоточности.
Еще в первых тестовых прототипах на Python я использовал раздельные потоки для загрузки информации из базы данных в GPU и для считывания ввода от пользователя и управления камерой. Пусть в Python многопоточность реализована в “софтовом” виде, но... [ продолжение ]
Динамическое перестроение границ.
Код 3D движка TrickRig обеспечивает динамическое перестроение данных в графической памяти (OpenGL VAO), из которых рендерится сцена:
- данные для рендера объектов, которые при перемещении камеры попадают в область видимости, в фоновом режиме подгружаются в VAO;
- ячейки графической памяти с данными, которые вышли за границы области видимости, исключаются из рендера и становятся доступными для записи новых данных. Точнее, так как OpenGL позволяет выделить только фиксированный размер памяти под VAO, то новые данные просто пишутся поверх данных тех объектов, которые вышли... [ продолжение ]
Октодерево и воксели
В разрабатываемом графическом движке одной из базовых возможностей должна стать техника “Level of Detail” (LOD) - изменение детализации 3D-объектов при изменении расстояния до наблюдателя. Без этого невозможно обеспечить онлайн-прорисовку открытого пространства c сохранением приемлемого FPS.
Сейчас основные модули формирования графического интерфейса и 3D сцены построены, и настала очередь заняться разработкой LOD. К сожалению, попытки “заточить” под работу с LOD текущую модель построения элементов пространства (на свободно трансформируемых боксах) привели к полному разочарованию - сложность реализации не выдерживает никакой критики. Стала... [ продолжение ]
Новая модель
Реализована новая модель построения объектов в пространстве. Теперь базовым элементом является коробочка - параллелепипед, с ограничением максимального размера, которую условно назвали “box”. Так как в box заложены собственные методы изменения размера в любом направлении и рендеринга, то стало намного проще управлять процессом конструирования объектов в пространстве. На очереди - управление размером шага при ручном моделировании объектов произвольной формы и реализация интерфейса выбора текстур для отдельных элементов.
Графическая библиотека
Целый месяц ушел на поиск и изучение свободных библиотек для создания элементов графического интерфейса. Перебрал наверно десятка два различных библиотек - собирал, изучал документацию, тестировал. В результате, по моему мнению, самой продвинутой и удобной для создания интерфейсов является связка из gtkmm и GTK+. Если бы я разрабатывал мультиплатформенное графическое приложение, без использования OpenGL, то остановил бы свой выбор именно на gtkmm. Правда, должен заметить, что в этот раз я не исследовал QT. Давно, когда я только начинал изучать... [ продолжение ]