Поваренная книга по игровой физике
Эта книга представляет собой подробное руководство по широко используемым играм по линейной алгебре и обнаружению столкновений, но лишь вкратце затрагивает тему разрешения столкновений (физика). Книга построена следующим образом:
- Главы 1, 2 и 3 посвящены основам линейной алгебры.
- В главах 4, 5 и 6 рассматриваются двумерные примитивы и способы обнаружения пересечений между ними.
- Главы 7, 8, 9 и 10 посвящены трехмерным примитивам и наиболее эффективному способу определения пересечений между ними.
- Главы 11, 12 и 13 посвящены сеткам, сценам и организации сцен.
- Главы 14, 15 и 16 посвящены физике. На протяжении этих трех глав мы создали очень простой физический движок твердого тела.
Все темы, рассмотренные в этой книге, используются для постепенного создания физического движка твердого тела. Последние три главы (14, 15 и 16) реализуют физику частиц, физику твердого тела и физику мягкого тела (ткань). Прилагается приложение, в котором кратко рассматриваются сложные темы, ресурсы для изучения этих тем, а также дополнительные ресурсы для изучения игровой физики.
Цифры
Некоторые рисунки, созданные для книги, не удалось перевести в печать. Чтобы решить эту проблему, я включил все рисунки из книги в этот репозиторий и опубликовал их в Интернете по адресу: https://github.com/gamephysicalscookbook/Figures.
Математика
Первые три главы книги посвящены обучению основам линейной алгебры, необходимым для разработки игр. Каждая концепция объясняется в математическом контексте, для каждой концепции предоставляется исходный код, а также предоставляются изображения, когда что-то можно изучить визуально. В первых трех главах создаются следующие структуры данных:
- 2-мерный вектор (
vec2
) - 3-мерный вектор (
vec3
) - Матрица 2x2 (
mat2
) - Матрица 3x3 (
mat3
) - Матрица 4x4 (
mat4
)
Когда это возможно, матричные операции реализуются общим способом. Например, предоставляется код для умножения двух матриц произвольных размеров.
Обнаружение столкновений
В книге рассматриваются следующие пересечения:
| Точка | Линия | Рэй | Сфера | ААББ | ОББ | Самолет | Треугольник | Усеченный конус |
---|
Точка | | | | | | | | | |
Линия | | | | | | | | | |
Рэй | | | | | | | | | |
Сфера | | | | | | | | | |
ААББ | | | | | | | | | |
ОББ | | | | | | | | | |
Самолет | | | | | | | | | |
Треугольник | | | | | | | | | |
Усеченный конус | | | | | | | | | |
Физика
Глава 14 посвящена наивной физике элементарных частиц. Эта глава представляет собой введение в настройку физического цикла и рассмотрение общего формата физического цикла. Глава 15 — самая интересная глава, в ней реализован базовый физический движок твердого тела. Базовый движок поддерживает ориентированные блоки и сферы, можно заставить работать стекирование, но оно не поддерживается напрямую. В главе 16 рассказывается о пружинах и о том, как их можно использовать для реализации физики мягких тел. Последняя демо-версия книги представляет собой демо-версию физики мягкого тела и ткани.
Обучение
Это моя первая книга, и я многое узнал о процессе написания; возможно, даже больше о планировании. Ниже приводится список вещей, которые я обнаружил во время написания этой книги и которые не спланировал должным образом:
Кватернионы : наличие кватерниона обязательно! Я планировал написать книгу, используя эйлеровы вращения и матрицы вращения. Хотя это и сработало, доступ к кватернионам сделал бы жизнь намного проще.
Плоскости : пересечения плоскостей не должны возвращать логическое значение, они должны классифицировать пересечение как: позади, пересекающееся, впереди. Предпочтительно, если перекресток находится спереди или сзади, вы хотите вернуть некоторое указание расстояния. Это становится очень полезным при отсеивании Frustum. Я не знал, насколько подробно я буду писать об усеченных пирамидах, поэтому решил сделать простое логическое пересечение.
Raycasting : мне следовало с самого начала написать raycasts, чтобы возвращать результат raycast. Позднее необходимость вернуться и переписать API raycasting оказалась более сложной для выражения в тексте, чем я ожидал. Идея заключалась в том, чтобы сначала все было просто, а усложнять только по мере необходимости.
Проблемы
Существуют различные проблемы в физической реализации исходного кода. Эти проблемы возникают из-за того, что физическую часть этой книги пришлось сжать в три главы. Просто не хватило времени, чтобы охватить все необходимое для создания надежной системы физики твердого тела. Самая большая проблема с движком — отсутствие Арбитра .
Без арбитра мы не сможем построить последовательный импульсный решатель. В результате мы имеем довольно простой, наивный импульсный решатель. Проблема в том, что импульсы решаются за контакт за кадр. Это вызывает чрезмерное скольжение. Отсутствие последовательного импульса я компенсировал линейной проекцией и агрессивным смещением трения. Старые физические движки делают нечто подобное, полагаясь на сильный сон, чтобы замаскировать проблему. Само собой, сон не был реализован.
Будущее
Если у меня будет возможность написать второе издание этой книги, я удалю главы о двумерных столкновениях (главы 4, 5 и 6) и уменьшу количество страниц в главах, посвященных управлению сценой. Я планирую использовать дополнительные страницы для освещения следующих тем:
- Углубленное обсуждение и реализация GJK
- Правильная система арбитров и более стабильная модель разрешения коллизий.
- Капсульный примитив
- Генерация выпуклой оболочки и тестирование столкновений
Информация о книге
- ISBN-13: 9781787123663
- Посмотреть на Packt
- Посмотреть на Амазоне
- Все мои публикации
Оглавление
- Векторы
- Введение
- Определение вектора
- Компонентные операции
- Скалярное произведение
- Величина
- Нормализация
- Перекрестное произведение
- Углы
- Проекция
- Отражение
- Матрицы
- Введение
- Определение матрицы
- Транспонировать
- Умножение
- Матрица идентичности
- Определитель матрицы 2x2
- Матрица несовершеннолетних
- Кофактор
- Определитель матрицы 3x3
- Операции с матрицей 4x4
- Адъюгатная матрица
- Матрица обратная
- Матричные преобразования
- Введение
- Матрица специальностей
- Перевод
- Масштабирование
- Как работают ротации
- Матрицы вращения
- Угол поворота оси
- Умножение векторной матрицы
- Преобразовать матрицу
- Матрица проекции
- 2D примитивные формы
- Введение
- 2D точки
- 2D линии
- Круг
- Прямоугольник
- Ориентированный прямоугольник
- Точечное сдерживание
- Пересечение линий
- 2D-столкновения
- Введение
- Круг за кругом
- Из круга в прямоугольник
- От круга к ориентированному прямоугольнику
- Прямоугольник в прямоугольник
- Теорема о разделяющей оси
- От прямоугольника к ориентированному прямоугольнику
- Ориентированный прямоугольник в ориентированный прямоугольник
- 2D-оптимизации
- Введение
- Содержащий круг
- Содержит прямоугольник
- Простые и сложные формы
- Четырехъядерное дерево
- Широкие фазовые столкновения
- 3D-примитивные формы
- Введение
- Точка
- Отрезок линии
- Рэй
- Сфера
- Ограничительная рамка, выровненная по оси
- Ориентированная строительная коробка
- Самолет
- Треугольник
- 3D точечные тесты
- Введение
- Точка и сфера
- Ограничительная рамка, выровненная по точкам и осям
- Точка и ориентированная ограничивающая рамка
- Точка и плоскость
- Точка и линия
- Точка и луч
- Пересечения 3D-форм
- Введение
- Сфера в сферу
- Ограничительная рамка, выровненная по сфере относительно оси
- От сферы к ориентированной ограничивающей рамке
- Сфера в плоскость
- Ограничительная рамка, выровненная по оси, к ограничивающей рамке, выровненной по оси
- Ограничительная рамка, выровненная по оси, к ориентированной ограничивающей рамке
- Ограничительная рамка, выровненная по оси относительно плоскости
- От ориентированной ограничивающей рамки к ориентированной ограничительной рамке
- Ориентированная ограничивающая рамка на плоскость
- Самолет в самолет
- Пересечения 3D-линий
- Введение
- Рейкаст-сфера
- Ограничительная рамка, выровненная по оси Raycast
- Ограничительная рамка, ориентированная на Raycast
- Рейкаст-плоскость
- Линейная сфера
- Ограничительная рамка, выровненная по оси Linetest
- Ограничительная рамка, ориентированная на Linetest
- Линейный испытательный самолет
- Треугольники и сетки
- Введение
- Точка в треугольнике
- Ближайшая точка треугольника
- Треугольник в сферу
- Ограничительная рамка, выровненная треугольником по оси
- Треугольник в ориентированном прямоугольнике
- Треугольник в плоскости
- Треугольник к треугольнику
- надежность теоремы о разделяющей оси
- Треугольник Рейкаста
- Линейный треугольник
- Сетчатый объект
- Оптимизация сетки
- Операции с сеткой
- Модели и сцены
- Введение
- Модельный объект
- Операции над моделями
- Объект сцены
- Операции на месте происшествия
- Объект октодерева
- Операции над октодеревом
- Интеграция Octree и сцены
- Камера и усеченная пирамида
- Введение
- Объект камеры
- Управление камерой
- Усеченный объект
- Фрезум из матрицы
- Сфера в усеченной пирамиде
- Ограничивающая рамка в усеченной пирамиде
- Отбраковка октодеревьев
- Сбор
- Решение ограничений
- Введение
- Введение в структуру
- Рейкаст-сфера
- Ограничивающая рамка Raycast
- Плоскость и треугольник Raycast
- Физическая система
- Интегрирующие частицы
- Решение ограничений
- Интеграция Верлет
- Многообразия и импульсы
- Введение
- Коллектор для сфер
- Коллектор для коробок
- Модификации жесткого кузова
- Скорость Линеры
- Линейный импульс
- Обновление системы физики
- Угловая скорость
- Угловой импульс
- Спринты и суставы
- Введение
- Модификации частиц
- Пружины
- Ткань
- Модификация физической системы
- Суставы
- Приложение: Дополнительные темы
- Введение
- Общие коллизии
- Улучшения стабильности
- Спринты
- Физические движки с открытым исходным кодом
- Книги
- Интернет-ресурсы
- Краткое содержание
Крышка