Емае... Почаще бы мне так тратить время, но могу порадовать - с горью пополам установил ImGui и GLFW (С горью пополам конечно, но да ладно. Прошлый опыт с VS и 3D не пропьешь хвхвхвх)
Также накинул базовые классы:
[RWidget] - Является простой единицой для UI элементов. Может унаследовать в себе элементы
[RWidgetWindow] - Является основой для UI элементов (холст)
[RButton] - Обыкновенная кнопка
[RWindow] - создает и обрабатывает окна. Внутри инициализирует GLFW и ImGui
Вот такие пироги. Самое главное наверное - что в любой момент я могу переписать любой модуль (например перейти с GLFW на SDL2), и ничего у меня не слетит
Кому интересно - вот структура движка. Все красиво упаковано и вообще шик и блеск
Также накинул базовые классы:
[RWidget] - Является простой единицой для UI элементов. Может унаследовать в себе элементы
[RWidgetWindow] - Является основой для UI элементов (холст)
[RButton] - Обыкновенная кнопка
[RWindow] - создает и обрабатывает окна. Внутри инициализирует GLFW и ImGui
Вот такие пироги. Самое главное наверное - что в любой момент я могу переписать любой модуль (например перейти с GLFW на SDL2), и ничего у меня не слетит
Кому интересно - вот структура движка. Все красиво упаковано и вообще шик и блеск
❤3❤🔥1🔥1
UHT... UHT... Unreal Header Tool... Что если я вам скажу, что я накатал его за 1 вечер?
Правильно - у тебя лично жизни вообще нет? Нет)
Root Header Tool - полностью открытый аналог Unreal Header Tool, работающий с редактором и генерирующий тот самый ".generated.h" код!
И что мы получаем? Та абсолютно все! GENERATED_BODY, RPROPERY, RFUNCTION, RCLASS и многое-многое другое! А самое наверное крутое - Super:: - такая маленькая штучка, которая имеет ссылку на родительский класс. Я ее тоже реализовал
Теперь код все больше похож на Анриловский, а моим достижением можно считать привязку RHT к Rider'у (Кстати привязка к VS у них разная, но принцип один и тот же)
И да, первый прототип написан на Питоне, но мне уже ничего не мешает переписать его на С++ и скомпилировать в .exe файл, но займусь как-нибудь.. попозже. Сейчас и этого достаточно
В общем вы рассматривайте этот шедевр по кусочкам, а я пойду отпраздную хвхвххв
Правильно - у тебя лично жизни вообще нет? Нет)
Root Header Tool - полностью открытый аналог Unreal Header Tool, работающий с редактором и генерирующий тот самый ".generated.h" код!
И что мы получаем? Та абсолютно все! GENERATED_BODY, RPROPERY, RFUNCTION, RCLASS и многое-многое другое! А самое наверное крутое - Super:: - такая маленькая штучка, которая имеет ссылку на родительский класс. Я ее тоже реализовал
Теперь код все больше похож на Анриловский, а моим достижением можно считать привязку RHT к Rider'у (Кстати привязка к VS у них разная, но принцип один и тот же)
И да, первый прототип написан на Питоне, но мне уже ничего не мешает переписать его на С++ и скомпилировать в .exe файл, но займусь как-нибудь.. попозже. Сейчас и этого достаточно
В общем вы рассматривайте этот шедевр по кусочкам, а я пойду отпраздную хвхвххв
🎉3❤1🔥1
Наука рулит, сэр! Матеша
В общем хоть что-то закончено за день. Накинуты большинство типов данных, а также приступил к написанию RMesh, RRenderPipeline и тд.
Прогресс? Спокойная музыка, полный багаж матеши (Матрицы самое 💀) и попытка поболтать с OpenGL. Ему то GLAD подавай, то GLFW ему не нравится, то еще что-то... жесть просто
В общем хоть что-то закончено за день. Накинуты большинство типов данных, а также приступил к написанию RMesh, RRenderPipeline и тд.
Прогресс? Спокойная музыка, полный багаж матеши (Матрицы самое 💀) и попытка поболтать с OpenGL. Ему то GLAD подавай, то GLFW ему не нравится, то еще что-то... жесть просто
❤🔥4🤔1💋1
С++ и его небольшой "грязный" хак
Вызов функции из ничего =)
Пишите чтобы вы такое положили до запуска движка 👀
Не волнуйтесь, статьей на всех хватит
Вызов функции из ничего =)
static bool _AutoRegister - Это статическая локальная переменная, инициализация которой происходит один раз при загрузке программы (перед началом main())
Вроде бы - и что с этого? Но именно в static переменную можно подложить свой код и он выполнится еще до загрузки всей программы! Хвхвхвххв, небольшой грязный трюк, но работает же)
Пишите чтобы вы такое положили до запуска движка 👀
❤5🔥2
𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
Чтобы блог не пустовал, решил с вами начать разработку движка. Шутка. Я точно не знаю какая точка с запятой застряла во мне, но решил начать писать собственный движок на С++ Да не просто движок, а с особой системой представления классов - смесь унаследованной…
Я говорил, что реализую создание систем без унаследования? Я сделал
Системы помечаются как RCLASS(System)
А затем на стадии компиляции регистрируются в движке (с небольшим хаком компилятора, а кому сейчас жить легко? хвхвхвх)
Я обещал - я сделал
Да, конечно сегодня планы были написать World и настроить камеру (чтобы камера хранила лишь основные данные, а дальше все камеры прогонялись через Render Pipeline, считайте система-компонент)
Но потерпел, завтра еще допишу регистрацию компонентов и.... Бинго! ГКМ будет написана и тогда можно будет реализовать все оставшиеся вещи
Напишу RObject - стандартный объект движка, RWorldObject - объект, который будет спавниться в мире (может еще подумаю над названием)
А позиции, физика, коллизия, рендер модели и камеры? Все будет компонентно и обрабатываться системами. От чего тот же RWorldObject может просто лежать в мире, или же иметь позицию
В общем ладно, день был необычным, всем спокойной ночи
Системы помечаются как RCLASS(System)
А затем на стадии компиляции регистрируются в движке (с небольшим хаком компилятора, а кому сейчас жить легко? хвхвхвх)
Я обещал - я сделал
Да, конечно сегодня планы были написать World и настроить камеру (чтобы камера хранила лишь основные данные, а дальше все камеры прогонялись через Render Pipeline, считайте система-компонент)
Но потерпел, завтра еще допишу регистрацию компонентов и.... Бинго! ГКМ будет написана и тогда можно будет реализовать все оставшиеся вещи
Напишу RObject - стандартный объект движка, RWorldObject - объект, который будет спавниться в мире (может еще подумаю над названием)
А позиции, физика, коллизия, рендер модели и камеры? Все будет компонентно и обрабатываться системами. От чего тот же RWorldObject может просто лежать в мире, или же иметь позицию
В общем ладно, день был необычным, всем спокойной ночи
👍5⚡1🤝1
Есть хочу...
То есть о чем я? Первый прототип ГКМ сделан и уже реализованы первые вещи. Знакомьтесь - FTransformComponent и FCameraComponent
К FCameraComponent создана система FCameraSystem, которая получает список камер, рассчитывает матрицу и передает их в общий Render Pipeline
Да, как-то так они реализуются, через RCLASS(System, Requires=...) и RCLASS(Component), а самое главное - все работает по ссылка, обновляется в реальном времени и не требует базовых классов. ООП идет нафиг одним словом :)
А вообще - не спрашивайте у женщин - их возраст, у мужчин - их ЗП, а Романова - как он реализовал чертовую регистрацию компонентов в движок!
Главное что работает :)
А так по мелочам - сделал RLevel - "контейнер" для миров, RWorld - мир, который хранит в себе RSceneObject, и от него унаследовал AActor - объект с вшитой в него компонентом трансформацией
Также думаю оставить возможность прикреплять компоненты в RObject, или перенести в RSceneObject, что думаете?
То есть о чем я? Первый прототип ГКМ сделан и уже реализованы первые вещи. Знакомьтесь - FTransformComponent и FCameraComponent
К FCameraComponent создана система FCameraSystem, которая получает список камер, рассчитывает матрицу и передает их в общий Render Pipeline
Да, как-то так они реализуются, через RCLASS(System, Requires=...) и RCLASS(Component), а самое главное - все работает по ссылка, обновляется в реальном времени и не требует базовых классов. ООП идет нафиг одним словом :)
А вообще - не спрашивайте у женщин - их возраст, у мужчин - их ЗП, а Романова - как он реализовал чертовую регистрацию компонентов в движок!
Главное что работает :)
А так по мелочам - сделал RLevel - "контейнер" для миров, RWorld - мир, который хранит в себе RSceneObject, и от него унаследовал AActor - объект с вшитой в него компонентом трансформацией
Также думаю оставить возможность прикреплять компоненты в RObject, или перенести в RSceneObject, что думаете?
❤5⚡1❤🔥1
Спустя год без личной жизни на плюсах поры бы изучить что-то новенькое. Поэтому нашел интересный гайд по UK2Node
Вообще:
Как-то так, ссылочка: тык
Вообще:
UK2Node = Kismet 2 - Старая библиотека для визуального скриптинга в Unreal Engine (Начиная еще с UE3/UE4)
Хоть вы и можете сказать, что мол "воспользуйся UFUNCTION(BlueprintCallable)". И вы будете правы, но от части. UFUNCTION - крайне примитивен и ограничен в своем функционале, да так еще вы не сможете создавать свои кастомные Exec-пины (Это те белые исполнительные пины, и да, я пытался...)
Как-то так, ссылочка: тык
❤3🔥1