Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Новое яркое приключение в волшебной стране пасьянса Эмерлэнде!

Эмерланд пасьянс

Карточные, Головоломки, Пазлы

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
8
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: DevLog 20250509⁠⁠

7 месяцев назад

С праздником! А мы продолжаем продолжать )

Краткий список изменений:

  • Исправлено поведение Атома Tickable для Дефолтных объектов

    Тем не менее, этот атом еще будет пересмотрен.

  • Добавлен флаг Final для RelictClass

    Классы, оглашенные с этим флагом не могут иметь потомков. Работает как и ключевое слово final для обычных классов, который, из-за фабричной имплементации не может быть применен к RelictClass.

  • Класс окна вынесен из подсистемы в Реликт Engine в виде интерфейса

  • Добавлен платформозависимый Реликт PlatformEngine

    В нем содержатся платформозависимые имплементации отдельных классов (например окна)

  • Пересмотрена система сборки проектов. Теперь подсистемы собираются в отдельные DLL, в случае, если конфигурация не продуктовая (для удобства дебага и пересборки)

  • Добавлен Новый атом Configable для работы с ini файлами

Атом Configable

Этот атом создан для быстрой подгрузки переменных из внешних конфигурационных ini файлов (или сохранения в него).
ini файлы расположены в двух местах. В директории Config корневой директории проекта и в Директории Save. В целом это работает примерно так-же, как и в UnrealEngine. Сначала смотрится значение в Default конфиге в Config директории, потом, если это разрешено настройкой, то смотрится override в Save.
Управляется так:

Загрузка разрешения окна из конфига Config/DefaultUserSettings.ini с возможностью переопределения в Save/Config/UserSettings.ini из секции Display

Загрузка разрешения окна из конфига Config/DefaultUserSettings.ini с возможностью переопределения в Save/Config/UserSettings.ini из секции Display

Показать полностью 1
[моё] Разработка Gamedev Инди Игровой движок
0
Вопрос из ленты «Эксперты»
HorrorClassics
HorrorClassics
Лига Геймеров

Движок рен ру. Как поставить gif (реального размера) поверх другого фона?⁠⁠

7 месяцев назад

Растягивать на весь экран не хочу файлы разного размера. Хочу поставить в центр экрана при этом остальное пространство или черный фон или заданный рисунок под гифкой.

[моё] Игровой движок Вопрос Спроси Пикабу Текст Gamedev
0
4
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: DevLog 20250419⁠⁠

7 месяцев назад

Пока нарабатываю теорию по рендерпайпу и работы с устройствами ввода, решил написать быстрозатычку для рендера OpenGL, чтобы понять есть все-же смысл в сторонней библиотеке или нет. Немножко баша для генерации статичного лодыря для glext/wglext и в принципе работает без всяких библиотек.

Увы, у меня пока нет возможности протестировать код под Linux (до этого момента пользовался WSL, но теперь потребуется что-то более нормальное, да с аппаратным ускорением). Нужно готовить окружение для тестов на базе виртуалки [или собрать образ под WSL2, хотя там будет не наглядно](хотя бы, хотя лучше , наверное, ноутбук купить [давно обновиться пора было]).

Результат работы рендера-затычки (все доступные расширения загружены; отключен vsync через расширение)

Результат работы рендера-затычки (все доступные расширения загружены; отключен vsync через расширение)

Краткий список изменений:

  • Исправлено поведение указателя на экземпляр Object после перехода в стадию GC_DESTROYED

  • Добавлена подсистема Renderer

  • Добавлена работа с окнами с учетом кроссплатформенности (не тестировалось)

  • Добавлен рендер затычка на базе OpenGL 4.6 (glClear + Swap) для теста загрузки функций - расширений собственным кодом

  • Реорганизованы правила CMake для оглашения подсистем для возможности добавить дополнительные эксклюзивные модули для нее.

  • Адресована проблема с Tickable Object. В тикере регистрируется даже Дефолтный объект, что не есть хорошо. Нужно будет исправить

Показать полностью 1
[моё] Разработка Gamedev Инди Игровой движок
0
4
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: ослик Иа или Ввод и Вывод⁠⁠

7 месяцев назад

В преддверье начала работ над графическим процессором предлагаю поговорить о таких фундаментальных вещах, как ввод и вывод. Т.е. ввод с клава/мыши или контроллера и вывод на экран графической информации. Казалось бы все просто. Бери SDL или glfw и пиши - там это все есть, но не все так просто.

Архитектура Relict Engine подразумевает, что ввод и вывод должны быть прописаны в разных модулях(или подсистемах), и, возможно, в разных потоках. Что означает, что с высокой долей вероятности придется отказаться от готовых библиотек и писать подсистемы для работы с вводом и выводом самостоятельно. В принципе это не страшно, но займет какое-то дополнительное время.

И если мы берем этот метод, соблюдая заложенный концепт архитектуры, то у нас получится примерно следующая структура:

Ввод:

  • Subsystem.Input - подсистема для работы с устройствами ввода

  • Реликт Input.Raw - модуль для работы с клавиатурой и мышью (в том числе с высоким DPI)

  • Реликт Input.Xinput - модуль для работы с Xinput (для поддержки контроллеров) [опциональный]

Вывод:

  • Subsystem.Renderer - некий универсальный api для работы непосредственно с графикой

  • Реликт Renderer.Window - модуль универсального api для работы с окнами

  • Реликт Renderer.Window.WinAPI - модуль для работы с окнами Windows

  • Реликт Renderer.Window.XWindow - модуль для работы с окнами Xorg

  • Реликт Renderer.Window.Wayland - модуль для работы с окнами Wayland (замена Xorg) [и вот еще нужно почитать нужны ли они будут обе, или достаточно только одной, ибо с Wayland еще не работал никогда]

  • Реликт Renderer.Null - модуль-затычка, на случай, если нам нужно только окно, но не рендер (ну и как прототип для GL и VK)

  • Реликт Renderer.GL - для работы с OpenGL

  • Реликт Renderer.VK - для работы с Vulkan

В случае, использования SDL/glfw, нам придется его зашивать намертво в модуль Engine, как прямую зависимость. Кода будет сильно меньше, но при этом мы несколько потеряем в гибкости (плюс SDL забирает на себя еще и работу со звуком, при этом F·Mod туда впиливается через непонятно кем написанный плагин, что не очень хорошо [хотя в принципе непонятно, на кой фиг это надо, т.к. F·Mod всегда был вещью в себе]).

В общем, пока думаю и читаю документации к api. А непосредственно работу начну, наверное, не раньше мая.

Показать полностью
[моё] Разработка Gamedev Инди Игровой движок Текст
0
8
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Первая бинарная сборка 0.0.1 и DevLog 20250409⁠⁠

8 месяцев назад

Перед началом работы с графикой решил поиграться с правилами CMake и попробовать собрать все в релизной конфигурации.

Что из этого получилось:

Движок собирается в пакет CMake, подключается стандартным образом через директиву find_package.
Поставляется в виде набора заголовочников, внешних библиотек (ThirdParty) и объектных (obj) библиотек самого движка. Почему именно объектных: Задумка следующая - программист сам выбирает как ему использовать движок (в виде DLL/so или собирать все в единый EXE/bin), и с какими конкретно модулями. Модули собраны в пространство имен CMake и подключаются довольно просто (потом напишу библиотеку для CMake чтобы еще больше это упростить), ну а пока это выглядит вот так:

Пример сборки приложения(игры) с dll движком

Пример сборки приложения(игры) с dll движком

Пока, конечно, все сыровато, есть вещи которые я в дальнейшем еще пересмотрю, но в целом работает.

Краткий список изменений:

  • Добавлен typedef TRelictClass на RelictClass

Теперь, вместо public RelictClass<Class, BaseClass, ClassFlags>::Type можно писать public TRelictClass<Class, BaseClass,ClassFlags> при оглашении игровых классов

  • Классы подсистемы вынесены на уровень выше в пространство имен Subsystems

  • Переработана работа SubsystemManager для удобства доступа к классу подсистемы

Теперь, для обращения к подсистеме нужно обращаться к менеджеру, а не к самому классу подсистемы: auto SS = SubsystemManager::Get<Subsystems::ScriptSubsystem>("ScriptSubsystem");

  • Исправлена работа функции FindObject со стороны Lua

После изменения регистранта Lua на UserData функция не была переписана. Упс.

  • Часть функций Виртуальной Машины Lua вынесены в глобальное пространство имен и больше не доступны для прямого вызова из вне.

  • Отключены стандартные библиотеки Lua за ислючением необходимого минимума.

  • Класс Application перенесен из модуля GameFramework в модуль Engine

Это было сделано, т.к. в бинарной сборке нарушался принцип наследования зависимостей.

  • Добавлены правила CMake для цели install

Показать полностью 1
[моё] Разработка Gamedev Инди Игровой движок
4
7
CodePanda
CodePanda
Лига программистов
Серия LOL Engine

LOL Engine день 2⁠⁠

8 месяцев назад

(пожалуй, буду нумеровать посты по дням)

Итак, сегодня после работы поработал немного больше.

Из полезностей - абстрагировал мусор в int main() в класс Application, добавил Logger и Timer (на очереди WindowManager и Renderer)

LOLEngine/Internal/main.cpp

LOLEngine/Internal/main.cpp

Из важного - сделал ServiceProvider.

LOLEngine/Include/Engine/Core/ServiceProvider.hpp

LOLEngine/Include/Engine/Core/ServiceProvider.hpp

Синглтоны в проекте будут, куда без них, но складывать их в глобальном пространстве я не люблю, так как такое трудно отлаживать. Поэтому, в Application появился ServiceProvider, в который я начал складывать все синглтоны для последующего прокидывания вглубь приложения. Вместо Logger::getInstance() будет _serviceProvider->GetService<Logger>()

LOLEngine/Internal/Engine/Core/Application.cpp

LOLEngine/Internal/Engine/Core/Application.cpp

Таким образом доступ к сервисам не будет у тех, у кого его быть не должно, а тех, у кого доступ есть - будет легче отлаживать.

Репозиторий все там-же

Победить сборку под веб сегодня не получилось, пошел сидеть над этим дальше.

Основная работа не позволяет заниматься движком много времени в день, но постараюсь что-то полезное делать ежедневно.

Принял решение не тратить много времени на расписывание каждой строчки кода, лучше этот часик потратить на сам код.

Огромное спасибо всем, кто задает вопросы в комментах и тычет носом в ошибки - постараюсь учесть и исправить. Вырасти, так сказать, над собой.

Из личного заметил, что два дня уже не думскролю пикабу, а пишу код. Очень этому рад, так что даже если эти посты будут набирать больше минусов, чем плюсов, все равно продолжу.

Как всегда - жду ваши плюсы/минус/комменты. Пошел кодить дальше

Показать полностью 3
[моё] Программирование Gamedev Инди Игровой движок C++ Длиннопост
12
11
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Скриптовая подсистема + DevLog 20250405⁠⁠

8 месяцев назад

финальный пост по скриптовой подсистеме

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

Итак, что-же мы умеем на данный момент

Первое, и основное: Проброс С++ объектов в скриптовый стек с возможностью наследования.

пример оглашения игровых классов и их скриптовых сущностей

пример оглашения игровых классов и их скриптовых сущностей

Наследование является опциональной (!) возможностью для скриптовой сущности. Наследуемая сущность указывается вторым аргументом, и не обязательно должна быть верхней в дереве наследования (можно пропустить часть классов, если нам не нужны их методы в текущей сущности). Если наследование не нужно, то требуется указать NULL (не 0, не nullptr, а именно NULL).

В юните так-же нужно не забыть зарегистрировать скриптовую сущность с помощью макроса REGISTER_SCRIPTCLASS, чтобы подсистема отправила его в виртуальную машину Lua.

Каждая скриптовая сущность может иметь, или не иметь поля. Каждое поле является методом, который может получать из виртуальной машины аргументы и возвращать в нее результат. Поддерживаются следующие типы аргумента: bool, int64_t, double, std::string, Object* и его производные (при условии наличия у них скриптовой сущности)

Функция вызывается привычным способом. Никакой дополнительной семантики не требуется

пример функции, доступной из скрипта

пример функции, доступной из скрипта

пример унаследованной функции (инвертируем результат)

пример унаследованной функции (инвертируем результат)

Наследования со стороны Lua пока-что не предусмотрено (но будет добавлено в дальнейшем) [под наследованием в данном ключе имеется ввиду наследование от Object классов, чтобы движок знал об этих сущностях. Обычное табличное наследование Lua работает]

Каждая зарегистрированная сущность сохраняется в глобальной таблице Lua и доступна в любое время для создания нового объекта, или поиска созданного ранее (как со стороны скрипта, так и со стороны C++). Для создания нового объекта используется метод NewObject, в качестве аргументов следует указать запись из глобальной таблицы Lua, которая связана с нашим С++ классом, и если необходимо, владельца нового объекта (иначе при первом же тике Сборщик мусора этот объект удалит). Для поиска объекта следует использовать метод FindObject. В качестве первого аргумента следует указать запись из глобальной таблицы Lua, а вторым, имя искомого объекта. В случае, если такой объект действительно существует, то в скрипт вернется его экземпляр. В противном случае, вернется nil

пример скрипта с вызовом Object сущности

пример скрипта с вызовом Object сущности

и результат его работы (обратите внимание, что вызов метода isPrime для ScriptedClass2 имеет инвертированный результат)

и результат его работы (обратите внимание, что вызов метода isPrime для ScriptedClass2 имеет инвертированный результат)

Короткий список изменений:

  • Переделан ScriptClass, для возможности наследования сущностей

  • Добавлен пустой класс ScriptClass_NULL для обозначения отсутствия наследования

  • Добавлен флаг Singleton (RootObject | NoInstantiate) для RelictClass шаблона

  • Добавлена спецфункция SetNull, вызываемая для void методов.

Следующим большим этапом, которым я буду заниматься после небольшого перерыва - это оконная подсистема (SDL2 или SDL3), рендер (OpenGL 4.5), математика на базе библиотеки glm и фреймворк сцен.

Показать полностью 6
[моё] Разработка Gamedev Инди Игровой движок Длиннопост
4
13
CodePanda
CodePanda
Лига программистов

Всем привет⁠⁠

8 месяцев назад

Приветствую пикабушников и пикабушниц, интересующихся разработкой комплюхтерных игор, да и разработкой в принципе.

Меня зовут Ярослав и я новорег (хотя и читал пикабу больше 10 лет). Собственно эти 10 лет я занимался работой на одном легаси мобильном проекте и стал подозревать, что навыки утекают в унитаз.

Я был одним из тех кто долго ждал релиза пошумевшего в новостях Российского движка Nau. Обещали кроссплатформенный движок с возможностью писать игровую логику на плюсах.

Всем привет

Выходит бета, и работает только под Windows (единственная ось, которая больше официально в России не работает) и только с DirectX рендером.

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

Почему я не взял какой-нибудь Unity или Unreal? Пытался. Не зашло.

Что я буду делать:

  • Писать свой игровой движок на примере маленьких проектов с целью подтянуть навыки в C++, CMake, GIT, Vulkan API, кроссплатформенной разработке, разобраться с хорошей архитектурой, ну и по мелочам чего-то наберется.

  • Сам работаю на Mac, поэтому проект будет собираться на CMake, IDE - Visual Studio Code,

  • язык C++ 23, чтобы читатели могли повторить это на винде и линухе.

Что я жду от сообщества:

  • Надеюсь, найдутся люди, кому это будет полезно.

  • Еще больше надеюсь, что найдутся люди, которые увидят слабые места в моем коде и честно накидают мне в панамку.

Когда проект будет дописан до состояния, когда говно и палки уже не надо будет крепить изолентой, сделаю проект на гите публичным.

Всем спасибо за внимание, надеюсь, пребывание здесь будет полезно и мне и вам. Ставьте плюсы/минусы, пишите комменты (в принципе пишите - интересно вам такое или нет?). Следующий пост напишу про структуру проекта на данный момент и настройку сборки.

Показать полностью 1
[моё] Программирование Программист Игровой движок Инди Gamedev Разработка C++
24
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии