00:00 Введение и обновление движка Обновление движка шутера от первого лица с включением текстурированных стен и спрайтов. Возможность стрельбы пулями и передвижения. Увеличение размера карты для более глубокого исследования. 00:54 Работа с кодовой базой Перенос кода на новую платформу с использованием консольного игрового движка. Включение файла консольного gameengine.h и других необходимых компонентов. Создание класса наследуемого от консольного игрового движка и перенос глобальных переменных в личное пространство класса. 01:51 Рефакторинг кода Удаление ненужных функций и переменных. Инициализация карты в функции создания пользователем. Обработка входных данных с использованием переменной m_keys вместо get_async_key_state. 04:39 Оптимизация рендеринга Замена переменных на функции рисования. Коррекция отображения карты и игрока. Упрощение кода и устранение ошибок. 05:58 Тестирование с высоким разрешением Настройка экрана на разрешение 320x240. Проверка работы алгоритма рендеринга на больших расстояниях. Тестирование взаимодействия с глубиной экрана при добавлении новых функций. 06:42 Добавление бокового движения Реализация бокового движения с использованием тригонометрических функций. Сопоставление движений с кнопками Q и E. 08:02 Работа со спрайтами Использование редактора спрайтов для создания и редактирования спрайтов. Загрузка спрайта в редактор и его изменение. Объяснение структуры спрайта как двухмерных массивов. 09:37 Нормализация и выборка спрайтов Нормализация значений пикселей в спрайте между 0 и 1. Процесс выборки цвета в определённом месте спрайта. Простота вычислений с использованием нормализованного пространства. 10:18 Нормализация координат текстуры Позиция выборки в y умноженная на высоту даёт местоположение в пикселях. Сэмплер работает по кругу упрощая повторение текстур. Размер текстуры не имеет значения сэмплер сам выполняет преобразования. 10:47 Объект olc sprite и функции выборки Объект olc sprite содержит функции get glyph и getcolour принимающие целочисленные аргументы. Добавлены функции примера глифа и примера цвета для нормализованного пространства. Результат выборки за пределами области спрайта будет пустым. 11:44 Определение расстояния до препятствия Расстояние до препятствия определяется путём тестирования линии. При столкновении с препятствием вычисляется глубина на экране. Для текстурированных стен необходимо знать координату столкновения. 12:41 Вычисление координаты выборки Одна единица в поперечнике эквивалентна одной текстуре. Сложность определения координаты выборки из-за отсутствия информации о геометрии. Использование десятичной дроби для координаты выборки. 14:27 Определение квадранта ячейки Определение квадранта ячейки с помощью функции касательной дуги. Поворот оси для совпадения с диагоналями ячейки. Функция арктангенса для определения стороны ячейки. 17:08 Вертикальное перемещение текстуры В псевдотрёхмерном приложении вертикаль не существует используется расстояние до препятствия. Определение высоты стены по координате y. Рисование пола стены и потолка в зависимости от глубины. 18:38 Реализация в коде Загрузка спрайта стены с помощью функции создания пользователем. Изменение программы обнаружения столкновений для работы с текстурой. Вычисление угла между серединой ячейки и точкой столкновения. 20:08 Расчёт угла и квадранта Использование функции atan2 для расчёта угла столкновения. Определение квадранта столкновения и его поворот на π. Выбор координат для выборки по текстуре. 21:07 Затенение стен и рисование Удаление кода затенения стен по интенсивности. Рисование потолка чёрным стены тёмно-зелёным пола тёмно-зелёным цветом. 22:14 Выборка координат и текстуры Расчёт координат x и y для выборки текстуры. Использование координат для выбора глифа и цвета. 22:49 Проблемы с текстурой и их решение Неряшливый вид текстуры на стенах. Решение проблемы с расстоянием: отказ от рисования стен на больших расстояниях. Уменьшение размера шага для улучшения разрешения. 24:02 Проблемы с субдискретизацией Программа выполняет супервыборку но не субдискретизацию. Ограничения консольного режима для отображения текстур. Привлекательный трёхмерный эффект благодаря перспективе. 24:57 Создание спрайтов и радиальная симметрия 25:55 Проверка видимости объектов 27:30 Инициализация объектов 28:00 Оценка видимости объектов 29:00 Ограничения на рисование объектов 30:00 Определение положения объекта на экране 30:56 Рисование текстуры объекта 32:10 Проблемы с отображением объектов 32:58 Добавление прозрачности спрайтов 33:20 Введение буфера глубины 34:21 Проверка работы буфера глубины 35:23 Обновление буфера глубины 35:40 Добавление стрельбы в шутер 37:33 Проверка видимости и удаление объектов 38:28 Демонстрация работы системы стрельбы и удаления объектов.
Источник: rutube.ru