#2. Upgraded! First Person Shooter at Command Prompt (C++)
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 Демонстрация работы системы стрельбы и удаления объектов.
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 Демонстрация работы системы стрельбы и удаления объектов.
