1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lin-boheng-simple3-deditor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 08:27 920ad21

Простой 3D-редактор Simple3DEditor

Введение

Simple3DEditor — это базовый 3D-редактор, написанный на C++. Графика основана на OpenGL. Возможно, со временем функционал редактора расширится.

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

Библиотеки

  • OpenGL;
  • OpenAL;
  • stb_image;
  • SoundTouch;
  • FFmpeg.

Функции редактора

  1. Базовое моделирование.
  2. Базовая графика.
  3. Редактирование UV-координат и наложение текстур.
  4. Декодирование аудио.
  5. Вокодер.
  6. Объёмный звук.
  7. Печать рендеринга.
  8. Создание анимации.

Планируемые функции

  1. Материалы.
  2. Кодирование вывода аудио.
  3. Видеокодирование и декодирование.
  4. Редактор шейдеров.
  5. Рендеринг 3D звука, анимации и видео с последующим кодированием вывода.
  6. Редактор узлов кода управления.
  7. Редактор графических узлов.
  8. Кисть 3D.
  9. Акварельная кисть.
  10. Трассировка лучей при рендеринге.
  11. Система плагинов. Планируется регистрация окон, меню, объектов, функций анимации, модификаторов, операций над объектами, инструментов ввода-вывода файлов и даже компилятора игр.
  12. Встроенный небольшой MC-игровой клиент (шутка).

Для удобства компиляции все зависимости (кроме базовых библиотек C++ и операционной системы) были добавлены в этот репозиторий. Это должно облегчить поиск зависимостей во время компиляции.

Этот проект — дань памяти трём годам обучения в старшей школе и участия в олимпиадах по информатике. Автор считает, что было бы неправильно не создать какое-нибудь программное обеспечение за это время. Скорее всего, редактор будет поддерживаться до окончания университета и после него.

Архитектура программного обеспечения

Редактор

Основные окна:

  • MainWindow — главное окно;
  • PaintWindow — окно рисования;
  • UVEditWindow — редактор UV-координат;
  • TreeWindow — окно управления объектами в виде дерева;
  • AudioPlayerWindow — проигрыватель аудио;
  • AudioCaptureWindow — запись и обработка звука;
  • AnimationWindow — управление анимацией;
  • RenderWindow — окно рендеринга;
  • NodeMapWindow — редактор узлов (не завершён).

GUI-контейнеры, менеджеры и компоненты:

  • AnimationCurve — кривая анимации;
  • Container — контейнер;
  • Menu — меню;
  • UIManager — менеджер пользовательского интерфейса;
  • ViewManager — менеджер окон просмотра.

Внешние диалоговые окна:

  • ColorBoard — палитра цветов;
  • Tips — информационные сообщения.

Библиотека инструментов

Часть функционала зависит от платформы. Исходный код находится в каталоге platform.

Базовые инструменты:

  • String — строки (зависит от платформы);
  • List — изменяемый массив;
  • File — файл (зависит от платформы);
  • Queue — очередь;
  • StringBuilder — класс для построения строк;
  • AudioUtils — инструменты для работы с аудио;
  • DataBuffer — буфер данных.

Графическая библиотека (можно реализовать другие графические API или даже мягкий растр):

  • GLUtils — графические инструменты;
  • GLSimplified — упрощённые функции OpenGL;
  • GLTexture2D — 2D текстуры;
  • GLLights — управление освещением;
  • GLShader — шейдеры;
  • GLProgram — программы шейдеров;
  • GLRenderTexture2D — рендеринг 2D текстур;
  • GLVertexArray — массивы вершин;
  • GLVertexBuffer — буферы вершин;
  • GLIndexBuffer — индексные буферы;
  • GLComputeProgram — вычислительные программы GPU.

Математическая библиотека:

  • Math — основные математические функции;
  • LinearAlgebra — линейная алгебра;
  • Geometry — геометрические фигуры;
  • Mesh — сетки;
  • Property — свойства;
  • ViewObject — видимые объекты.

Библиотека операционной системы (планируется реализация для разных платформ):

  • AppFrame — основное окно приложения;
  • Font — управление шрифтами;
  • GLFunc — расширенные функции OpenGL;
  • Log — вывод логов;
  • Resource — управление ресурсами;
  • Shell — вызов команд;
  • Thread — управление потоками;
  • Time — время.

Планируемые части:

  1. GUIManager — управление 2D-объектами. Должен заменить UIManager и управлять координатами преобразования. Возможно также использование AViewObject и создание CanvasObject.
  2. PluginManager — менеджер плагинов. Уже реализована возможность сделать основную программу динамической библиотекой. Плагины должны взаимодействовать с функциями и классами основной программы. Также рассматривается вариант использования Java для взаимодействия с плагинами.
  3. WindowManager — менеджер окон. Для регистрации новых типов окон во время выполнения.
  4. test — папка для модульных тестов.
  5. Интеграция с Autodesk FBX SDK. Импорт и экспорт сцен и объектов в формате .fbx.
  6. Собственная система рендеринга или использование готовых решений.
  7. Вычислительный конвейер рендеринга и трассировка лучей. Реализация может быть сложной, а также непонятно, как получить доступ к OpenRL SDK.
  8. Не хватает многих компонентов пользовательского интерфейса. Предыдущий компонент UIEditA не соответствовал ожиданиям автора из-за недостатков UIManager. Сейчас планируется его переписать. По крайней мере, нужен редактор свойств.
  9. Интеграция json-cpp для сохранения настроек.
  10. Сделать так, чтобы все классы, которым нужно сохранять данные, наследовали интерфейс сериализации и реализовывали его. Реализовать сохранение состояния программы. Структура данных: магическое слово 'SVFILE', объектный идентификатор {данные, [объектный идентификатор, ...]}, дерево с одним корнем.
  11. После каждой команды реализовывать соответствующий IUndo и добавлять его в очередь LocalData для отмены действий. Много работы.
  12. Использовать FreeType для поддержки китайского языка и кроссплатформенности.
  13. Использовать GLFW для кроссплатформенных окон приложений. Для Windows можно оставить реализацию в платформе для некоторых функций, таких как обработка сообщений WM_DROPFILES.
  14. Заменить GLEW на GLEW для получения расширенных функций OpenGL. Ручная загрузка была вызвана проблемами с конфигурацией.
  15. Если возможно, интегрировать IDE для плагинов, чтобы упростить разработку плагинов. Может ли это стать похожим на Houdini?
  16. Если использовать Java в качестве языка плагинов, то можно добавить среду выполнения и объединить множество плагинов в одно приложение. Но не похоже ли это на то, как работает Unity3D на Android?
  17. ShaderConductor от Epic Games — открытый исходный код. Можно использовать для реализации кросс-API шейдеров.
  18. «Рендеринг» должен поддерживать 3D звук во время анимации. Нужно найти способ использовать OpenAL для вывода стереозвука и напрямую рендерить видео со звуком с помощью FFmpeg. Это одна из самых интересных функций для автора.
  19. При извлечении устройства во время воспроизведения звука через OpenAL невозможно воспроизвести звук снова. Необходимо написать обработчик событий для изменений оборудования и обновить все аудиоданные в этом обработчике. Все аудиоплееры могут быть реализованы как производные классы AViewObject. Во время события необходимо уведомить все звуковые источники о необходимости обновления. Обратите внимание, что аудиоданные сохраняются в звуковых объектах.

Автор предполагает, что на завершение проекта уйдёт несколько лет. Он планирует больше учиться и меньше писать код самостоятельно. Просит помощи у других разработчиков в реализации задуманного (считает, что это большой проект).

Скриншоты

Скриншот Описание
capture1
capture2
capture3
capture4

Установка

  1. Скачать релиз или исходный код и скомпилировать.
  2. Убедиться, что установлен и настроен mingw (все зависимости находятся в ветке AVDevelop).
  3. Выполнить make.exe в папке с исходным кодом.

Использование

  1. Документация пока не написана, но можно посмотреть .rc файл для поиска быстрых клавиш.
  2. Возможны ошибки.
  3. На данный момент автор один, и если нужна новая функциональность, пожалуйста, поймите, сколько времени требуется на разработку.

Таблица быстрых клавиш

Обратите внимание: Ctrl+W открывает меню управления окнами.

Клавиша Действие
p Добавить точку
f Добавить линию или плоскость (выбрать две или три точки)
g Перемещение
r Вращение
s Масштабирование
c Выбор цвета (сначала выбрать вершину)
x Операция на оси X
y Операция на оси Y
z Операция на оси Z
X (shift + x) Операция на плоскости XY
Y (shift + y) Операция на плоскости ZX
Z (shift + z) Операция на плоскости XZ
delete Удалить вершину
ESC Выход
Ctrl+S Сохранить
Alt+/ Alt+? Информация о программе
Alt+(0-9) Выбор инструмента
Ctrl+L Загрузить
e Создать новую вершину
Shift+A Основное меню
Ctrl+P Печать

Участие и вклад

  1. Fork этого репозитория.
  2. Создать ветку Feat_xxx.
  3. Отправить код.
  4. Создать Pull Request.

Специальные навыки

  1. Использование Readme_XXX.md для поддержки разных языков, например Readme_en.md, Readme_zh.md.
  2. Официальный блог Gitee [blog.gitee.com].
  3. Можно https://gitee.com/explore для изучения отличных проектов с открытым исходным кодом на Gitee.
  4. ...

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lin-boheng-simple3-deditor.git
git@api.gitlife.ru:oschina-mirror/lin-boheng-simple3-deditor.git
oschina-mirror
lin-boheng-simple3-deditor
lin-boheng-simple3-deditor
AVdevelop