#2. 3D-графический движок - нормали, отсечение, освещение и объектные файлы

00:00 Введение и проблема • Продолжение создания трёхмерного графического движка. • Запуск кода из предыдущего видео с каркасным вращающимся кубом. • Проблема: видны стороны куба, которые обычно не должны быть видны. 00:58 Нормали и геометрия • Куб состоит из шести граней, разделённых на треугольники. • Важность нормалей для трёхмерных движков: нормаль — это воображаемая линия, перпендикулярная плоскости треугольника. • Треугольники на передней грани куба имеют видимые нормали. 02:19 Генерация нормалей • Модель не содержит нормалей, они генерируются по мере необходимости. • Геометрические методы получения нормалей: перекрестное произведение. • Перекрестное произведение создаёт вектор, перпендикулярный двум заданным линиям. 03:57 Алгоритмы вычисления нормалей • Вычисление x-, y- и z-составляющих вектора нормали через перекрестное произведение. • Влияние порядка вершин треугольника на направление нормали. 05:39 Оптимизация куба • Нормали с отрицательной z-составляющей видны, с положительной — нет. • Оптимизация куба путём фильтрации невидимых треугольников. 06:33 Реализация в коде • Вычисление нормали треугольника после перевода в мировое пространство. • Нормализация нормали до единичного вектора. • Преобразование треугольника в экранное пространство с помощью матрицы проекции. 09:18 Проблема проекции • Неправильное отображение граней из-за отсутствия учёта проекции. • Необходимость учёта местоположения камеры относительно нормалей. 09:34 Введение камеры • Представление камеры как векторного местоположения в пространстве. • Упрощённое представление камеры без учёта направления движения. 11:04 Перспектива и скалярное произведение • Проблема фильтрации нормалей без учёта перспективы. • Определение угла наклона нормали относительно линии проекции от камеры. • Использование скалярного произведения для оценки схожести нормали и линии проекции. 13:03 Скалярное произведение • Скалярное произведение определяет степень сходства двух векторов. • Для трёхмерного случая произведение вычисляется путём умножения компонентов векторов. • Пример: если векторы направлены в разные стороны, скалярное произведение равно нулю. 13:49 Примеры скалярного произведения • Если векторы совпадают, скалярное произведение равно единице. • Если один вектор направлен противоположно другому, скалярное произведение равно минус единице. • Пример с чёрным и красным векторами: при совпадении направлений произведение равно единице, при разных направлениях — нулю. 14:45 Применение скалярного произведения в 3D • Расчёт скалярного произведения между линией от камеры к треугольнику и нормалью треугольника. • Использование компонентов x, y и z для вычисления произведения. • Проверка видимости треугольника через скалярное произведение. 17:18 Каркасные объекты и заполнение треугольников • Каркасные объекты полезны для отладки, но не отражают реалистичность. • Заполнение треугольников добавляет затенение и реалистичность. • Добавление источника освещения для улучшения восприятия объектов. 18:42 Освещение и цветопередача • Освещение зависит от выравнивания нормали треугольника с направлением света. • Нормализация направления света для корректного расчёта. • Преобразование значений яркости в оттенки серого для консоли. 21:10 Инкапсуляция функциональности • Инкапсуляция процесса рисования треугольников для упрощения отладки. • Использование информации о символах и цвете для рисования треугольников. • Демонстрация подсвеченного куба. 23:15 Внедрение сторонних объектов • Использование программного обеспечения для 3D-моделирования, например, Blender. • Экспорт моделей в объектный формат .obj для интеграции в игровой движок. • Проверка нормалей и триангуляция граней перед экспортом. 25:45 Особенности объектных файлов • Объектные файлы содержат данные о вершинах и гранях, но не учитывают количество полигонов. • Важно, чтобы модель состояла исключительно из треугольников для корректной работы с игровым движком. • Автоматическое триангулирование граней при необходимости. 26:13 Работа с объектными файлами в Visual Studio • Объектные файлы можно перетаскивать в Visual Studio, и они будут отрисованы. • Создаётся функция load from object file для загрузки модели из файла в удобный формат. 26:51 Структура объектного файла • Файл представлен в удобочитаемом текстовом формате. • Первые две строки — комментарии и мусор, обозначенные символом хэша. • Строки, начинающиеся со строчной буквы «v», содержат местоположение вершин в трёхмерном пространстве. 27:17 Интерпретация данных в файле 28:17 Начало загрузки файла 29:41 Чтение данных о вершинах 30:21 Чтение данных о треугольниках 32:16 Проблемы с отображением модели 33:11 Решение проблем с производительностью 34:11 Алгоритм художника 35:24 Реализация сортировки треугольников 36:46 Определение средней точки z треугольников 37:40 Сортировка и растеризация треугольников 37:56 Результаты оптимизации 38:18 Планы на будущее 39:16 Оптимизация кода

Иконка канала Ленинский Букварь
240 подписчиков
12+
4 просмотра
2 дня назад
12+
4 просмотра
2 дня назад

00:00 Введение и проблема • Продолжение создания трёхмерного графического движка. • Запуск кода из предыдущего видео с каркасным вращающимся кубом. • Проблема: видны стороны куба, которые обычно не должны быть видны. 00:58 Нормали и геометрия • Куб состоит из шести граней, разделённых на треугольники. • Важность нормалей для трёхмерных движков: нормаль — это воображаемая линия, перпендикулярная плоскости треугольника. • Треугольники на передней грани куба имеют видимые нормали. 02:19 Генерация нормалей • Модель не содержит нормалей, они генерируются по мере необходимости. • Геометрические методы получения нормалей: перекрестное произведение. • Перекрестное произведение создаёт вектор, перпендикулярный двум заданным линиям. 03:57 Алгоритмы вычисления нормалей • Вычисление x-, y- и z-составляющих вектора нормали через перекрестное произведение. • Влияние порядка вершин треугольника на направление нормали. 05:39 Оптимизация куба • Нормали с отрицательной z-составляющей видны, с положительной — нет. • Оптимизация куба путём фильтрации невидимых треугольников. 06:33 Реализация в коде • Вычисление нормали треугольника после перевода в мировое пространство. • Нормализация нормали до единичного вектора. • Преобразование треугольника в экранное пространство с помощью матрицы проекции. 09:18 Проблема проекции • Неправильное отображение граней из-за отсутствия учёта проекции. • Необходимость учёта местоположения камеры относительно нормалей. 09:34 Введение камеры • Представление камеры как векторного местоположения в пространстве. • Упрощённое представление камеры без учёта направления движения. 11:04 Перспектива и скалярное произведение • Проблема фильтрации нормалей без учёта перспективы. • Определение угла наклона нормали относительно линии проекции от камеры. • Использование скалярного произведения для оценки схожести нормали и линии проекции. 13:03 Скалярное произведение • Скалярное произведение определяет степень сходства двух векторов. • Для трёхмерного случая произведение вычисляется путём умножения компонентов векторов. • Пример: если векторы направлены в разные стороны, скалярное произведение равно нулю. 13:49 Примеры скалярного произведения • Если векторы совпадают, скалярное произведение равно единице. • Если один вектор направлен противоположно другому, скалярное произведение равно минус единице. • Пример с чёрным и красным векторами: при совпадении направлений произведение равно единице, при разных направлениях — нулю. 14:45 Применение скалярного произведения в 3D • Расчёт скалярного произведения между линией от камеры к треугольнику и нормалью треугольника. • Использование компонентов x, y и z для вычисления произведения. • Проверка видимости треугольника через скалярное произведение. 17:18 Каркасные объекты и заполнение треугольников • Каркасные объекты полезны для отладки, но не отражают реалистичность. • Заполнение треугольников добавляет затенение и реалистичность. • Добавление источника освещения для улучшения восприятия объектов. 18:42 Освещение и цветопередача • Освещение зависит от выравнивания нормали треугольника с направлением света. • Нормализация направления света для корректного расчёта. • Преобразование значений яркости в оттенки серого для консоли. 21:10 Инкапсуляция функциональности • Инкапсуляция процесса рисования треугольников для упрощения отладки. • Использование информации о символах и цвете для рисования треугольников. • Демонстрация подсвеченного куба. 23:15 Внедрение сторонних объектов • Использование программного обеспечения для 3D-моделирования, например, Blender. • Экспорт моделей в объектный формат .obj для интеграции в игровой движок. • Проверка нормалей и триангуляция граней перед экспортом. 25:45 Особенности объектных файлов • Объектные файлы содержат данные о вершинах и гранях, но не учитывают количество полигонов. • Важно, чтобы модель состояла исключительно из треугольников для корректной работы с игровым движком. • Автоматическое триангулирование граней при необходимости. 26:13 Работа с объектными файлами в Visual Studio • Объектные файлы можно перетаскивать в Visual Studio, и они будут отрисованы. • Создаётся функция load from object file для загрузки модели из файла в удобный формат. 26:51 Структура объектного файла • Файл представлен в удобочитаемом текстовом формате. • Первые две строки — комментарии и мусор, обозначенные символом хэша. • Строки, начинающиеся со строчной буквы «v», содержат местоположение вершин в трёхмерном пространстве. 27:17 Интерпретация данных в файле 28:17 Начало загрузки файла 29:41 Чтение данных о вершинах 30:21 Чтение данных о треугольниках 32:16 Проблемы с отображением модели 33:11 Решение проблем с производительностью 34:11 Алгоритм художника 35:24 Реализация сортировки треугольников 36:46 Определение средней точки z треугольников 37:40 Сортировка и растеризация треугольников 37:56 Результаты оптимизации 38:18 Планы на будущее 39:16 Оптимизация кода

, чтобы оставлять комментарии