Сколько уже было мануалов "Как сделать игру на Unity за 3 часа", "Делаем Counter-Strike за вечер" и т.п.? Низкий порог входа — это, несомненно, главный плюс и минус Unity. Действительно, можно накидать “ассетов”, дописать несколько простых “скриптов”, обмотать синей изолентой и это даже будет как-то работать. Но когда проект обрастает игровыми механиками, сложной логикой поведения, то проблемы при подобном подходе нарастают как снежный ком. Для внедрения новых механик требуется переписывание кода во многих местах, постоянная проверка и переделывание префабов из-за побившихся ссылок на компоненты логики, не говоря уже об оптимизации и тестировании всего этого. Разумеется, архитектуру можно продумать изначально, но на практике это всегда недостижимая цель — дизайн-документ довольно часто меняется, какие-то части выкидываются, добавляются абсолютно новые и никак не связанные со старой логикой поведения. Компоненты в Unity — это шаг в правильном направлении в виде декомпозиции кода на изолированные блоки, но особенности реализации не позволяют достичь необходимой гибкости, а самое главное, производительности. Разработчики придумывают свои фреймворки и велосипеды, но чаще всего останавливаются на ECS (Entity Component System). ECS – одно из решений, продолжающее идею компонентной модели Unity, но придающее ей ещё больше гибкости и сильно упрощающее рефакторинг и дальнейшее расширение приложения новым функционалом без кардинальных изменений в текущем коде.
User
Шаблон проектирования Entity-Component-System — реализация и пример игры
В этой статье я хочу обсудить шаблон проектирования «сущность-компонент-система» (Entity-Component-System, ECS). По этой теме можно найти много информации в Интернете, поэтому я не буду глубоко вдаваться в объяснения, а больше расскажу о моей собственной реализации.
Часть 1: Реализация шаблона Entity-Component-System на C++
Начнём сначала. Полный исходный код моей реализации ECS можно найти в репозитории на github.
Entity-Component-System, в основном используемый в играх — это шаблон проектирования, обеспечивающий огромную гибкость в проектировании общей архитектуры программного обеспечения[1]. Такие большие компании, как Unity, Epic или Crytek используют этот шаблон в своих фреймворках, чтобы предоставить разработчикам очень богатый возможностями инструмент, с помощью которого они могут разрабатывать собственное ПО. Прочитать более широкое обсуждение по этой тематике можно в этих постах [2,3,4,5].
Аллокаторы памяти
Установка и настройка transmission-daemon Ubuntu server 20.04
Инструкция по настройке transmission-daemon под управлением Ubuntu Server 20.04
Магнитные щиты планет. О разнообразии источников магнитосфер в солнечной системе
6 из 8 планет солнечной системы обладают собственными источниками магнитных полей, способные отклонять потоки заряженных частиц солнечного ветра. Объем пространства вокруг планеты, в пределах которого отклоняется от траектории солнечный ветер, именуется магнитосферой планеты. Несмотря на общность физических принципов генерирования магнитного поля, источники магнетизма, в свою очередь, сильно варьируются у разных групп планет нашей звездной системы.
Изучение разнообразия магнитных полей интересно тем, что наличие магнитосферы, предположительно, является важным условием для возникновения жизни на планете или ее естественном спутнике.
KODI: собираем удобный и функциональный медиацентр для дома. Часть 1
Поговорим о том, как при наличии небольшого количества времени и навыков построить мультимедийный комбайн с дополнительными возможностями домашнего сервера на базе Kubuntu 20.04 и KODI, способного работать 24/7/365.
Создание системы сцен для игрового движка
Предисловие
В настоящее время я работаю над собственным игровым движком. С использованием минимального количества сторонних библиотек, после реализации игрового цикла (game loop), отрисовки кадра, функции «update», загрузки текстур и пр., основная «начинка» движка была готова. Пришло время реализации еще одной важной составляющей — сцены (scene).
Введение
В статье я предполагаю, что движок уже оснащен игровым циклом с «callback»-функциями. Весь код будет написан на Java, но может быть легко перенесен на любой другой язык, поддерживающий garbage collection. Что-ж, приступим.
Создание dungeon crawler'а с LeoECS Lite. Часть 1
Друзья, это начало нового цикла статей про создание игры жанра dungeon crawler с использованием фреймворка LeoECS Lite, и его задача – помочь вам быстро разобраться, как на практике применить LeoECS Lite для разработки игр на Unity и решить некоторые виды проблем. Перед чтением убедитесь, что вы понимаете принципы архитектурного паттерна ECS, так как отвлекаться на базовые понятия мы не будем, а перейдем сразу к практике.
learnopengl. Уроки 3.1 (Assimp) + 3.2 (класс Mesh)
Assimp
Во всех уроках, мы, в основном, использовали нашего маленького друга — контейнер, но через некоторое время, даже наши лучшие друзья становятся немного скучными. В большом графическом приложении, обычно присутствуют много моделей, на которые намного приятнее смотреть, чем на наш статичный контейнер. Хотя, в отличие от контейнера, нам будет очень сложно, вручную, определить все вершины, нормали и текстурные координаты таких сложных моделей, как например дом или человекоподобные персонажи. Вместо этого, мы будем имортировать модели в наше приложение; модели, которые были тщательно нарисованы, в 3D редакторах, таких как Blender, 3DS MAX или Maya.
Эти, так называемые инструменты 3D моделирования, позволяют художникам создавать сложные модели и применять текстуры к ним с помощью процесса, который называется текстурная развертка (uv-mapping). Инструменты автоматически генерируют все вершинные координаты, вершины нормалей и текстурные координаты, экспортируя их в файл модели. Таким образом, художники имеют обширный набор инструментов для создания высококачественных моделей, не заботясь о технических деталях. Все технические аспекты спрятаны в экспортируемом файле. Мы, как программисты графики, должны позаботится об этих технических деталях.
Конструирование LIDAR своими руками. Часть1
Данная статья посвящена изучению принципов и практической реализации технологии обнаружения и определения дальности с помощью активных оптических систем (LIDAR)
LIDAR – Light Detection and Ranging – технология получения и обработки информации об удалённых объектах с помощью активных оптических систем, применяющих явления поглощения и рассеяния света в оптически прозрачных средах.
На сегодняшний день оптические локационные системы являются наиболее распространёнными системами, привлекающих к себе внимание учёных и практиков как инструменты, обеспечивающие максимальную информативность и точность при наблюдениях и дистанционных измерениях.
Оптическая локация, представляет собой совокупность методов обнаружения, измерения координат, а также распознавания формы удалённых объектов с помощью электромагнитных волн оптического диапазона. Одной из известных оптических локационных систем является технология LIDAR.
Целью статьи является, исследование различных областей применения оптических локационных систем, более глубокое познание в их использовании, огромнейшая ценность этих систем в наше время, их дальнейшие тенденции и возможности развития. А также статья направлена на выявление современной и актуальной технологии, работающей на основе оптических локационных систем.
Технология LIDAR
Лидары – лазерные локационные оптико-электронные системы (ОЭС) активного типа, предназначенные для активного дистанционного зондирования окружающей среды с целью получения информации для решения научных, производственных, экологических и метрологических задач.
STM32 и USB-HID — это просто
Однако все современные стандарты исключили COM порт из состава ПК и приходится использовать USB-UART переходники, чтобы получить доступ к своему проекту на МК. Не всегда он есть под рукой. Не всегда такой переходник работает стабильно из-за проблем с драйверами. Есть и другие недостатки.
Но каждый раз, когда заходит разговор о том, применять USB или последовательный порт, находится множество поклонников логической простоты UART. И у них есть на то основания. Однако, хорошо ведь иметь альтернативу?
Меня давно просили рассказать как организовать пакетный обмен данными между ПК и МК на примере STM32F103. Я дам готовый рабочий проект и расскажу как его адаптировать для своих нужд. А уж вы сами решите — нужно оно вам или нет.
У нас есть плата с современным недорогим микроконтроллером STM32F103C8 со встроенной аппаратной поддержкой USB, я рассказывал о ней ранее
C++: сеанс спонтанной археологии и почему не стоит использовать вариативные функции в стиле C
CallVoidMethod
— вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в
CallVoidMethod
использовал va_list
, потому что по-другому в данном случае никак. Да, так и отправил va_list
в CallVoidMethod
. И уронил JVM банальным segmentation fault.За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной
CallVoidMethod
есть CallVoidMethodV
, которая произвольное число аргументов принимает через va_list
.Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и
va_list
. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list
, и (поскольку речь все-таки о C++) с вариативными шаблонами.Создание игры для SEGA Mega Drive/Genesis в 2019 году
Даже сегодня люди по-прежнему продолжают создавать новые игры для старых консолей. Мы называем их «homebrew». Иногда это способ реализовать детскую мечту о создании игры для консоли, на которой играл ребёнком. Но кроме того это ещё и интересная задача для любого дизайнера или разработчика игр: ретро-железо обладало множеством ограничений, бросающих вызов креативности авторов. В 90-х для профессиональных разработчиков эти ограничения были привычными. Сегодня, когда у нас есть более совершенные инструменты, создание игр для подобных машин стало гораздо доступнее.
В прошлом году я написал статью о создании игры для Game Boy. Сегодня я поделюсь своим опытом создания трёх игр для домашней консоли SEGA Mega Drive/Genesis. Вероятно, благодаря современным мощным инструментам, это самая простая машина для разработки homebrew-игры. Например, мне даже удалось создать (очень простую) игру всего за 60 минут, и она на самом деле запускается на консоли!
Analysis of UE5 Rendering Technology: Nanite
After Epic released the UE5 technology demo at the beginning of 2021, the discussion about UE5 has never stopped. Related technical discussions mainly centered on two new features: global illumination technology Lumen and extremely high model detail technology Nanite. There have been some articles [1 ][2] analyzing Nanite technology in more detail. This article mainly starts from the RenderDoc analysis and source code of UE5, combined with some existing technical data, aims to provide an intuitive and overview understanding of Nanite, and clarify its algorithm principles and design ideas, without involving too many source code level Implementation details.
Архитектура Playstation 2
Оригинальная Playstation 2, выпущенная 04.03.2000 в Японии, 26.10.2000 в Америке и 24.11.2000 в Европе
Краткое введение
Playstation 2 не была одной из самых мощных консолей своего поколения, однако смогла достичь уровня популярности, немыслимого для других компаний.
Эта машина даже близко не сравнится по простоте с первой Playstation, но вскоре мы узнаем, почему она не разделила судьбу рассмотренных нами ранее сложных консолей.
Software renderer — 2: растеризация и интерполяция атрибутов
Наши входные данные — это набор полигонов (мы будем рассматривать только треугольники): координаты их вершин (система координат зависит от алгоритма) и значения атрибутов в каждой из этих вершин, которые в дальнейшем будут интерполироваться вдоль поверхности треугольника. Существует несколько подводных камней, которые я рассмотрю в этой статье:
- Правило заполнения пикселей (filling convention)
- Точность
- Коррекция перспективы при интерполяции аттрибутов (perspective-correct interpolation)
Я рассмотрю три подхода к растеризации:
- «стандартный» алгоритм, использующий наклон граней
- целый ряд алгоритмов, основанных на использовании уравнений граней полигона (traversal-алгоритмы)
- алгоритм растеризации в однородных координатах
Так же в конце будет ссылка на проект, который является примером реализации, оттуда же будут и примеры кода.
Пишем наш первый модуль для ядра Linux
Пожалуй, ядро Linux сегодня – это самый вездесущий (и по-прежнему недооцененный) программный код. На нем основаны все дистрибутивы Linux (что очевидно), но это далеко не все. Кроме того, на ядре Linux работает огромная масса встроенного ПО практически везде. У вас есть микроволновка? Вероятно, она работает на ядре Linux. Посудомоечная машина? Тоже. Вы состоятельный человек и приобрели автомобиль Tesla? Может быть, вы найдете в ней какие-то баги и исправите их, в таком случае, можете отправить патч им на Github, где лежит код для модели S и модели X. Электронная начинка МКС, благодаря которой станция не падает на Землю смертельно опасным и разрушительным огненным болидом — конечно же, тоже работает под Linux. Ядро легковесно. Наверное, именно поэтому оно так хорошо работает в условиях низкой гравитации.
[В закладки] Кунг-фу на клавиатуре. Искусство сочетать клавиши
Сочетания клавиш для тех, кто хочет войти в IT и не только
К сожалению, для многих знание "контрол-цэ" и "контрол-вэ" становится верхней границей в использовании комбинаций клавиш. Именно для них были написаны первые главы этой статьи, где мы разберем основные сочетания клавиш и советы по эффективному использованию клавиатуры, которые прогонят из вас компьютерную мышь.
Для тех, кто осилил начало статьи, а также для уже опытных пользователей клавиатуры дальше начнется самое интересное. Я расскажу о таком инструменте, как AutoHotkey и о своем скрипте, использование которого сделает из вас настоящего печатающего ниндзю.
В конце вы увидите, как все эти знания можно использовать при работе с самым популярным на данный момент текстовым редактором Visual Studio Code.
Элементы языка С, которые являются неподдерживаемыми в языке С++
Нижеприведенный список является моей небольшой коллекцией примеров кода на языке С, которые не являются корректными с точки зрения языка С++ или имеют какое-то специфичное именно для языка С поведение. (Именно в эту сторону: С код, являющийся некорректным с точки зрения С++.)
Этот материал я уже публиковал на другом ресурсе в менее причесанном виде, Я бы, наверное, поддался прокрастинации и никогда не собрался опубликовать эту коллекцию здесь, но из-за горизонта уже доносится стук копыт неумолимо приближающегося С23, который безжалостно принесет некоторые жемчужины моей коллекции в жертву богам С-С++ совместимости. Поэтому мне и пришлось встать с печи, пока они еще актуальны...
Разумеется, язык С имеет много существенных отличий от языка С++, т.е. не составит никакого труда привести примеры несовместимостей, основанные, скажем, на ключевых словах или других очевидных эксклюзивных свойствах С99. Таких примеров вы не найдете в списке ниже. Мой основной критерий для включения примеров в этот список заключался именно в том, что пример кода должен выглядеть на первый взгляд достаточно "невинно" для С++-наблюдателя, т.е. не содержать бросающихся в глаза С-эксклюзивов, но тем не менее являться специфичным именно для языка С.
Заметки о вращении вектора кватернионом
Структура публикации
- Получение кватерниона из вектора и величины угла разворота
- Обратный кватернион
- Умножение кватернионов
- Поворот вектора
- Рысканье, тангаж, крен
- Серия поворотов
Получение кватерниона из вектора и величины угла разворота
Ещё раз – что такое кватернион? Для разработчика – это прежде всего инструмент, описывающий действие – поворот вокруг оси на заданный угол:
(w, vx, vy, vz),
где v – ось, выраженная вектором;
w – компонента, описывающая поворот (косинус половины угла).
Information
- Rating
- Does not participate
- Registered
- Activity