Хроника развития

  • 2015 г, март. Начало воплощения идеи. Первые пробы на Python.
  • 2015 г, апрель. Подключение GLSL шейдеров.
  • Процессы расчета координат и построения пространства выделены в отдельный поток от подпроцессов обработки ввода пользователя.
  • Замеры скорости расчета и загрузки координат точек пространства на платформе Python показали неудовлетворительные результаты.
  • Переход на cPython не принес ожидаемого эффекта.
  • Попытки использовать в проекте новый язык программирования nimrod оказались неудачными из-за проблем взаимодействия с графическими С-библиотеками.
  • 2016 г, январь. Код проекта с нуля разрабатывается на C++.
  • 2016 г, февраль. Реализован в виде внешней библиотеки класс GLSL-программы и загрузки шейдеров.
  • 2016 г, апрель. GUI выделен в группу классов, взаимодействие с графическим ядром реализовано через класс интерфейса.
  • 2016 г, май. Графическое ядро с обработчиком событий ввода вынесено в отдельный поток.
  • 2016 г, май. В виде отдельной библиотеки реализована система регистрации сообщений отладки и журналирование событий.
  • 2016 г, июнь. Выполнен расчет формата данных для хранения, поиска и обмена между сервером и клиентами.
  • 2016 г, июнь. Реализована мультиплатформенная мини-библиотека и класс для работы с UDP сокетами.
  • 2016 г, июнь. Реализован рабочий вариант интерфейса управления положением в пространстве.
  • 2016 г, июль. Первая сборка всего в комплексе. Общее тестирование построения логики работы движка.
  • 2016 г. август. Перенос кода в SFML. Большое число зависимостей от SDL2 - почти весь код надо переписывать.
  • 2016 г. октябрь. SFML понравился простотой и удобством, но разочаровал стабильностью и 3D функционалом.
  • 2016 г. ноябрь. Разработана обертка C++ к libpng для загрузки изображений.
  • 2016 г. ноябрь. Реализована поддержка вывода текста на базе libfreetype.
  • 2016 г. декабрь. Создание окна, контента и обработка событий полностью переведено на использование GLFW.
  • 2017 г. январь. GLSL шейдерами реализовано базовое освещение сцены.
  • 2017 г. февраль. Система сборки проекта переведена на cmake.
  • 2017 г. март. Перевод приложения на профиль сore OpenGL 3.3.
  • 2017 г. май. Тесты с геометрическим шейдером
  • 2017 г. июнь. Работа с дублирующим рендером и системами частиц.
  • 2017 г. июль. Реализован способ динамического изменения содержимого VBO буфера сцены.
  • 2017 г. август. Настроен рендер 3D сцены во фрейм-буфер.
  • 2017 г. сентябрь. Реализован рендер текста при помощи библиотеки Freetype.
  • 2017 г. ноябрь. Переделан основной алгоритм формирования виртуального пространства. В качестве базового элемента теперь используется четырехугольная поверхность (Snip), привязанная к объекту Rig, как опорной точке в 3D коодинатах.
  • 2017 г. декабрь. Реализован импорт текстурированых объектов из .OBJ файлов.
  • 2017 г. декабрь. Реализован класс работы с Sqlite3. Хранение настроек перенесено в базу даннх Sqlite.
  • 2018 г. январь. Разработаны и реализованы в коде базовые принципы построения и хранения геометрии виртуального пространства в реляционной базе данных
  • 2018 г. февраль. Подключена сетевая библиотека Enet и сделаны базовые элементы класса "обертки" для реализации клиент-серверной архитектуры приложения.
  • 2018 г. сентябрь. Реализованы классы клиент-серверной архитектуры, разработана консоль для ввода команд на базе ncurses.
  • 2018 г. ноябрь. Реализован собственный класс для создания и управления элементами графического интерфейса приложения.
  • 2018 г. ноябрь. Из-за проблем в работе с библиотекой freetype приложение переведено на использование текстурных шрифтов.

В процессе работы над проектом изучено

  • Построение, API и принципы работы с OpenGL.
  • Применение математичеких матриц в 3D программировании.
  • Керниган и Ритчи "Язык программирования С".
  • Бьярне Страуструп "Язык программирования C++".
  • Питер Готтшлинг "Современный С++"
  • Дэвид Вольф "Open GL 4. Язык шейдеров"
  • Шаблоны проектирования.