Предисловие...........................................................................................................................................26
От издательства.................................................................................................................................27
Новое в третьем издании....................................................................................................................28
Благодарности........................................................................................................................................30
Часть I. Основы
Глава 1. Введение..................................................................................................................................34
1.1. Структура типичной игровой команды.........................................................................35
1.1.1. Разработчики..........................................................................................................36
1.1.2. Специалисты творческих профессий.............................................................36
1.1.3. Геймдизайнеры.......................................................................................................37
1.1.4. Продюсеры...............................................................................................................38
1.1.5. Другой персонал....................................................................................................38
1.1.6. Издатели и студии.................................................................................................38
1.2. Что такое игра.........................................................................................................................39
1.2.1. Видеоигры как мягкая симуляция реального времени............................39
1.3. Что такое игровой движок.................................................................................................41
1.4. Различия движков для разных жанров.........................................................................43
1.4.1. Шутеры от первого лица.....................................................................................44
1.4.2. Платформеры и другие игры от третьего лица...........................................46
1.4.3. Файтинги..................................................................................................................47
1.4.4. Гонки..........................................................................................................................49
1.4.5. Игры-стратегии......................................................................................................51
1.4.6. Многопользовательские онлайн-игры...........................................................52
1.4.7. Контент, созданный игроком.............................................................................54
1.4.8. Виртуальная, дополненная и смешанная реальность...............................56
1.4.9. Другие жанры.........................................................................................................60
1.5. Обзор игровых движков.....................................................................................................60
1.5.1. Семейство движков Quake.................................................................................60
1.5.2. Движок Unreal........................................................................................................61
1.5.3. Source — движок Half-Life..................................................................................62
1.5.4. DICE Frostbite........................................................................................................62
1.5.5. RAGE..........................................................................................................................62
1.5.6. CRYENGINE...........................................................................................................63
1.5.7. Sony PhyreEngine...................................................................................................63
1.5.8. Microsoft XNA Game Studio...............................................................................63
1.5.9. Unity...........................................................................................................................64
1.5.10. Другие коммерческие игровые движки.........................................................64
1.5.11. Внутренние движки, находящиеся в частной собственности................65
1.5.12. Движки с открытым исходным кодом...........................................................65
1.5.13. Игровые движки 2D для непрограммистов.................................................66
1.6. Архитектура среды выполнения движка......................................................................67
1.6.1. Целевое аппаратное обеспечение.....................................................................67
1.6.2. Драйверы устройств.............................................................................................67
1.6.3. Операционная система........................................................................................70
1.6.4. Сторонние SDK и промежуточное ПО..........................................................70
1.6.5. Уровень независимости от платформы..........................................................73
1.6.6. Основные системы................................................................................................74
1.6.7. Управление ресурсами.........................................................................................75
1.6.8. Движок рендеринга...............................................................................................75
1.6.9. Инструменты профилирования и отладки...................................................79
1.6.10. Столкновения и физика......................................................................................81
1.6.11. Анимация.................................................................................................................82
1.6.12. Устройства ввода....................................................................................................83
1.6.13. Аудио..........................................................................................................................83
1.6.14. Многопользовательская онлайн-игра (игра по сети)...............................84
1.6.15. Система основного геймплея............................................................................85
1.6.16. Специфические для игры подсистемы..........................................................88
1.7. Инструменты и конвейер ресурсов.................................................................................88
1.7.1. Инструмент создания контента........................................................................92
1.7.2. Конвейер подготовки ресурсов.........................................................................92
1.7.3. Редактор мира.........................................................................................................95
1.7.4. База данных ресурсов...........................................................................................96
1.7.5. Некоторые подходы к архитектуре инструментов....................................97
Глава 2. Полезные инструменты...................................................................................................100
2.1. Контроль версий..................................................................................................................100
2.1.1. Зачем использовать контроль версий..........................................................101
2.1.2. Распространенные системы контроля версий...........................................101
2.1.3. Обзор Subversion и TortoiseSVN....................................................................102
2.1.4. Настройка репозитория с кодом....................................................................103
2.1.5. Установка TortoiseSVN......................................................................................103
2.1.6. Версии файлов, обновление и коммиты......................................................105
2.1.7. Многократная синхронизация, ветвление и слияние.............................107
2.1.8. Удаление файлов..................................................................................................109
2.2. Компиляторы, компоновщики и IDE..........................................................................109
2.2.1. Исходные файлы, заголовки и единицы компиляции...........................110
2.2.2. Библиотеки, исполняемые файлы и динамически компонуемые
библиотеки.............................................................................................................110
2.2.3. Проекты и решения............................................................................................111
2.2.4. Конфигурации сборки.......................................................................................112
2.2.5. Отладка кода.........................................................................................................122
2.3. Инструменты профилирования.....................................................................................130
2.3.1. Список профилировщиков..............................................................................132
2.4. Утечка и нарушение целостности памяти..................................................................132
2.5. Другие инструменты..........................................................................................................133
Глава 3. Основы разработки игрового ПО.................................................................................135
3.1. Обзор C++ и лучшие практики......................................................................................135
3.1.1. Краткий обзор ООП...........................................................................................136
3.1.2. Стандартизация языка С++.............................................................................142
3.1.3. Стандарты программирования: для чего и сколько................................147
3.2. Поиск и обработка ошибок..............................................................................................148
3.2.1. Типы ошибок.........................................................................................................148
3.2.2. Обработка ошибок..............................................................................................149
3.2.3. Реализация обнаружения ошибок и их обработки..................................151
3.3. Данные, код и схема памяти............................................................................................159
3.3.1. Числовые представления..................................................................................159
3.3.2. Примитивные типы данных.............................................................................165
3.3.3. Килобайт или кибибайт....................................................................................170
3.3.4. Объявления, определения и компоновка....................................................171
3.3.5. Структура памяти программы C/C++.........................................................177
3.3.6. Переменные-члены.............................................................................................182
3.3.7. Расположение объектов в памяти..................................................................184
3.4. Основы аппаратного обеспечения компьютеров.....................................................191
3.4.1. Обучение на более простых компьютерах прошлых лет.......................191
3.4.2. Архитектура компьютера..................................................................................192
3.4.3. Центральный процессор...................................................................................193
3.4.4. Частота....................................................................................................................197
3.4.5. Память.....................................................................................................................198
3.4.6. Шины.......................................................................................................................199
3.4.7. Машинный и ассемблерный языки...............................................................201
3.5. Архитектура памяти...........................................................................................................207
3.5.1. Сопоставление памяти......................................................................................207
3.5.2. Виртуальная память...........................................................................................209
3.5.3. Архитектуры памяти для уменьшения задержки....................................213
3.5.4. Иерархии кэш-памяти.......................................................................................215
3.5.5. Неоднородный доступ к памяти.....................................................................222
Глава 4. Параллелизм и конкурентное программирование.................................................226
4.1. Определение конкурентности и параллелизма........................................................227
4.1.1. Конкурентное выполнение..............................................................................227
4.1.2. Параллелизм.........................................................................................................228
4.1.3. Параллелизм данных и задач..........................................................................229
4.1.4. Таксономия Флинна...........................................................................................230
4.1.5. Ортогональность конкурентных вычислений и параллелизма..........233
4.1.6. Вопросы, рассматриваемые в главе...............................................................233
4.2. Неявный параллелизм.......................................................................................................233
4.2.1. Конвейерная обработка.....................................................................................234
4.2.2. Задержка и пропускная способность............................................................236
4.2.3. Глубина конвейера..............................................................................................236
4.2.4. Потеря скорости конвейера.............................................................................237
4.2.5. Зависимости данных..........................................................................................237
4.2.6. Зависимости ветвления.....................................................................................239
4.2.7. Суперскалярные процессоры..........................................................................243
4.2.8. Очень длинные командные слова..................................................................245
4.3. Явный параллелизм...........................................................................................................247
4.3.1. Гиперпоточность..................................................................................................247
4.3.2. Многоядерные процессоры..............................................................................248
4.3.3. Симметричная и асимметричная многопроцессорная обработка......250
4.3.4. Распределенные вычисления..........................................................................251
4.4. Основы операционной системы.....................................................................................252
4.4.1. Ядро..........................................................................................................................252
4.4.2. Прерывания...........................................................................................................254
4.4.3. Вызовы ядра..........................................................................................................255
4.4.4. Вытесняющая многозадачность.....................................................................256
4.4.5. Процессы................................................................................................................257
4.4.6. Потоки.....................................................................................................................262
4.4.7. Фиберы....................................................................................................................271
4.4.8. Потоки пользовательского уровня и корутины........................................273
4.4.9. Что еще почитать о процессах и потоках....................................................276
4.5. Введение в параллельное программирование...........................................................277
4.5.1. Зачем писать параллельное программное обеспечение.........................277
4.5.2. Модели параллельного программирования...............................................278
4.5.3. Состояние гонки..................................................................................................279
4.5.4. Критические операции и атомарность.........................................................282
4.6. Примитивы синхронизации потоков...........................................................................287
4.6.1. Мьютексы...............................................................................................................288
4.6.2. Критически важные секции.............................................................................290
4.6.3. Переменные условия..........................................................................................291
4.6.4. Семафоры...............................................................................................................295
4.6.5. События Windows...............................................................................................299
4.7. Проблемы с параллелизмом на основе блокировки...............................................300
4.7.1. Взаимная блокировка........................................................................................300
4.7.2. Динамическая взаимная блокировка...........................................................302
4.7.3. Ресурсное голодание..........................................................................................303
4.7.4. Инверсия приоритетов......................................................................................303
4.7.5. Обедающие философы......................................................................................304
4.8. Несколько лучших практик параллелизма................................................................305
4.8.1. Правила глобального порядка........................................................................305
4.8.2. Алгоритмы на основе транзакций..................................................................306
4.8.3. Минимизация раздоров....................................................................................307
4.8.4. Безопасность потоков........................................................................................307
4.9. Параллелизм без блокировок.........................................................................................308
4.9.1. Причины ошибок в гонке данных..................................................................310
4.9.2. Реализация атомарности...................................................................................311
4.9.3. Барьеры...................................................................................................................319
4.9.4. Семантика упорядочения памяти..................................................................322
4.9.5. Атомарные переменные.....................................................................................332
4.9.6. Параллельность в интерпретируемых языках
программирования..............................................................................................335
4.9.7. Спин-блокировки................................................................................................336
4.9.8. Транзакции без блокировок.............................................................................344
4.9.9. Связанный список без блокировки...............................................................345
4.9.10. Дополнительная литература по программированию
без блокировки.....................................................................................................346
4.10. SIMD/векторная обработка............................................................................................347
4.10.1. Набор инструкций SSE и его регистры.......................................................348
4.10.2. Использование SSE для векторизации цикла...........................................352
4.10.3. Векторизованное скалярное произведение................................................353
4.10.4. Векторно-матричное умножение с помощью SSE...................................358
4.10.5. Матрица-матричное умножение с SSE........................................................358
4.10.6. Обобщенная векторизация..............................................................................359
4.10.7. Предикация векторов.........................................................................................360
4.11. Введение в программирование GPGPU.....................................................................363
4.11.1. Параллельные вычисления данных..............................................................364
4.11.2. Вычислительные ядра........................................................................................365
4.11.3. Выполнение ядра.................................................................................................367
4.11.4. Потоки GPU и группы потоков......................................................................368
4.11.5. Дополнительная литература ...........................................................................372
Глава 5. 3D-математика для игр....................................................................................................373
5.1. Решение 3D-задач в 2D.....................................................................................................373
5.2. Точки и векторы...................................................................................................................374
5.2.1. Точки и декартовы координаты......................................................................374
5.2.2. Левосторонние и правосторонние системы координат..........................375
5.2.3. Векторы...................................................................................................................376
5.2.4. Векторные операции..........................................................................................377
5.2.5. Линейная интерполяция точек и векторов................................................388
5.3. Матрицы.................................................................................................................................388
5.3.1. Умножение матриц..............................................................................................389
5.3.2. Представление точек и векторов в виде матриц.......................................390
5.3.3. Единичная матрица............................................................................................391
5.3.4. Инвертирование матриц...................................................................................391
5.3.5. Транспонирование...............................................................................................391
5.3.6. Однородная система координат.....................................................................392
5.3.7. Матрицы базовых преобразований...............................................................394
5.3.8. Матрицы 4 × 3.......................................................................................................397
5.3.9. Координатное пространство............................................................................397
5.3.10. Переход к новому базису..................................................................................401
5.3.11. Преобразование векторов нормали...............................................................404
5.3.12. Хранение матриц в памяти...............................................................................404
5.4. Кватернионы.........................................................................................................................406
5.4.1. Единичные кватернионы как трехмерные вращения.............................407
5.4.2. Операции с кватернионами.............................................................................408
5.4.3. Вращение векторов через кватернионы......................................................409
5.4.4. Кватернионно-матричная эквивалентность..............................................410
5.4.5. Линейная интерполяция вращения..............................................................412
5.5. Сравнение представлений вращения...........................................................................414
5.5.1. Углы Эйлера..........................................................................................................415
5.5.2. Матрицы 3 × 3.......................................................................................................415
5.5.3. Ось + угол...............................................................................................................416
5.5.4. Кватернионы.........................................................................................................416
5.5.5. Преобразования SRT.........................................................................................416
5.5.6. Двойные кватернионы.......................................................................................417
5.5.7. Вращения и степени свободы..........................................................................418
5.6. Другие полезные математические объекты...............................................................419
5.6.1. Прямые, лучи и отрезки....................................................................................419
5.6.2. Сферы......................................................................................................................420
5.6.3. Плоскости...............................................................................................................420
5.6.4. Параллельные осям ограничивающие параллелепипеды.....................422
5.6.5. Ориентированные ограничивающие параллелепипеды........................422
5.6.6. Усеченная пирамида...........................................................................................423
5.6.7. Выпуклые многогранные области.................................................................424
5.7. Генерация случайных чисел.............................................................................................424
5.7.1. Линейные конгруэнтные генераторы...........................................................424
5.7.2. Вихрь Мерсенна...................................................................................................425
5.7.3. Мать всего, Xorshift и KISS99.........................................................................425
5.7.4. PCG..........................................................................................................................426
Часть II. Низкоуровневые системы движка
Глава 6. Системы поддержки движка..........................................................................................428
6.1. Подсистема запуска и остановки...................................................................................428
6.1.1. Порядок статической инициализации C++
(или его отсутствие)...........................................................................................428
6.1.2. Простой работающий подход..........................................................................431
6.1.3. Некоторые примеры реальных движков.....................................................433
6.2. Управление памятью..........................................................................................................436
6.2.1. Оптимизация динамического распределения памяти............................436
6.2.2. Фрагментация памяти.......................................................................................446
6.3. Контейнеры...........................................................................................................................450
6.3.1. Операции с контейнерами................................................................................452
6.3.2. Итераторы..............................................................................................................452
6.3.3. Алгоритмическая сложность...........................................................................454
6.3.4. Создание пользовательских контейнерных классов...............................455
6.3.5. Динамические массивы и выделение памяти фрагментами................459
6.3.6. Словари и хеш-таблицы....................................................................................460
6.4. Строки.....................................................................................................................................464
6.4.1. Проблема со строками.......................................................................................464
6.4.2. Классы строк.........................................................................................................465
6.4.3. Уникальные идентификаторы........................................................................466
6.4.4. Локализация..........................................................................................................469
6.5. Конфигурация движка......................................................................................................479
6.5.1. Параметры загрузки и сохранения................................................................479
6.5.2. Параметры для каждого пользователя.........................................................480
6.5.3. Управление конфигурацией в некоторых реальных движках.............481
Глава 7. Ресурсы и файловая система.........................................................................................486
7.1. Файловая система...............................................................................................................487
7.1.1. Имена файлов и пути к ним.............................................................................487
7.1.2. Базовый файловый ввод/вывод.....................................................................491
7.1.3. Асинхронный файловый ввод/вывод..........................................................493
7.2. Менеджер ресурсов............................................................................................................497
7.2.1. Автономное управление ресурсами и цепочка инструментов.............498
7.2.2. Управление ресурсами среды выполнения................................................507
Глава 8. Игровой цикл и симуляция в реальном времени...................................................526
8.1. Цикл рендеринга.................................................................................................................526
8.2. Цикл игры..............................................................................................................................527
8.2.1. Простой пример: пинг-понг.............................................................................527
8.3. Архитектурные стили цикла игры................................................................................529
8.3.1. Конвейер сообщений Windows.......................................................................529
8.3.2. Фреймворки на основе обратных вызовов.................................................530
8.3.3. Обновление на основе событий......................................................................531
8.4. Абстрактные временные шкалы.....................................................................................532
8.4.1. Реальное время.....................................................................................................532
8.4.2. Игровое время.......................................................................................................532
8.4.3. Локальное и глобальное время.......................................................................533
8.5. Измерение времени и работа с ним..............................................................................534
8.5.1. Частота смены кадров и время........................................................................534
8.5.2. От частоты кадров к скорости.........................................................................535
8.5.3. Измерение реального времени с помощью таймера высокого
разрешения............................................................................................................539
8.5.4. Единицы измерения времени и переменные часов.................................540
8.5.5. Работа с точками останова...............................................................................543
8.6. Многопроцессорные игровые циклы...........................................................................544
8.6.1. Разложение задания...........................................................................................544
8.6.2. Один поток на подсистему...............................................................................545
8.6.3. Разбиение/сборка................................................................................................546
8.6.4. Система заданий..................................................................................................549
Глава 9. Устройства HID..................................................................................................................559
9.1. Виды HID-устройств.........................................................................................................559
9.2. Взаимодействие с HID-устройствами.........................................................................561
9.2.1. Опрашивание........................................................................................................561
9.2.2. Прерывания...........................................................................................................562
9.2.3. Беспроводные устройства................................................................................562
9.3. Виды элементов управления...........................................................................................562
9.3.1. Цифровые кнопки...............................................................................................562
9.3.2. Аналоговые оси и кнопки.................................................................................564
9.3.3. Относительные оси.............................................................................................565
9.3.4. Акселерометр........................................................................................................565
9.3.5. Положение в трехмерном пространстве при использовании
Wiimote или DualShock.....................................................................................566
9.3.6. Камеры....................................................................................................................566
9.4. Виды вывода.........................................................................................................................569
9.4.1. Вибрация................................................................................................................569
9.4.2. Силовая обратная связь....................................................................................569
9.4.3. Звук..........................................................................................................................569
9.4.4. Другие разновидности ввода и вывода........................................................569
9.5. Системы игрового движка для работы с HID-устройствами..............................570
9.5.1. Типичные требования........................................................................................570
9.5.2. Мертвые зоны.......................................................................................................571
9.5.3. Фильтрация аналоговых сигналов................................................................571
9.5.4. Обнаружение событий ввода...........................................................................573
9.5.5. Управление несколькими HID-устройствами для нескольких
игроков....................................................................................................................580
9.5.6. Межплатформенные HID-системы..............................................................580
9.5.7. Переназначение элементов управления......................................................582
9.5.8. Контекстный ввод...............................................................................................583
9.5.9. Отключение элементов управления.............................................................584
9.6. HID-устройства на практике..........................................................................................585
Глава 10. Инструменты для отладки и разработки.................................................................586
10.1. Журналирование и трассировка.....................................................................................586
10.1.1. Форматированный вывод с помощью
функции OutputDebugString().......................................................................587
10.1.2. Уровень детализации..........................................................................................588
10.1.3. Каналы.....................................................................................................................589
10.1.4. Копирование вывода в файл............................................................................590
10.1.5. Отчеты о сбоях.....................................................................................................590
10.2. Средства отладочной отрисовки....................................................................................591
10.2.1. API для отладочной отрисовки......................................................................593
10.3. Внутриигровые меню.........................................................................................................597
10.4. Внутриигровая консоль....................................................................................................598
10.5. Отладочные камеры и остановка игры........................................................................599
10.6. Читы.........................................................................................................................................600
10.7. Снимки экрана и запись видео.......................................................................................601
10.8. Внутриигровое профилирование..................................................................................602
10.8.1. Иерархическое профилирование...................................................................603
10.8.2. Экспорт в Excel.....................................................................................................608
10.9. Внутриигровые показатели использования памяти
и обнаружение утечек........................................................................................................609
Часть III. Графика, движение и звук
Глава 11. Движок рендеринга.........................................................................................................614
11.1. Основы растеризации треугольников с буферизацией глубины.......................614
11.1.1. Описание сцены...................................................................................................616
11.1.2. Описание визуальных свойств поверхности.............................................626
11.1.3. Основы освещения..............................................................................................640
11.1.4. Виртуальная камера...........................................................................................649
11.2. Конвейер рендеринга.........................................................................................................660
11.2.1. Общая схема конвейера рендеринга.............................................................661
11.2.2. Инструментальный этап...................................................................................663
11.2.3. Этап подготовки ресурсов................................................................................665
11.2.4. Конвейер графического процессора.............................................................666
11.2.5. Программируемые шейдеры............................................................................671
11.2.6. Сглаживание.........................................................................................................677
11.2.7. Этап приложения................................................................................................680
11.3. Продвинутые методы освещения и глобальное освещение.................................691
11.3.1. Освещение на основе изображения..............................................................691
11.3.2. Освещение с расширенным динамическим диапазоном.......................695
11.3.3. Глобальное освещение.......................................................................................696
11.3.4. Отложенный рендеринг....................................................................................703
11.3.5. Физически корректное затенение.................................................................704
11.4. Визуальные эффекты и наложения..............................................................................705
11.4.1. Эффекты частиц..................................................................................................705
11.4.2. Декали.....................................................................................................................706
11.4.3. Эффекты окружения..........................................................................................707
11.4.4. Наложения.............................................................................................................710
11.4.5. Гамма-коррекция.................................................................................................712
11.4.6. Полноэкранные постэффекты........................................................................714
11.5. Дополнительная литература...........................................................................................714
Глава 12. Системы анимации.........................................................................................................716
12.1. Разновидности анимации персонажей........................................................................716
12.1.1. Келевая анимация...............................................................................................717
12.1.2. Жесткая иерархическая анимация................................................................717
12.1.3. Повершинная анимация и морфинг-мишени............................................718
12.1.4. Скиновая анимация............................................................................................720
12.1.5. Методы анимации как методы сжатия данных.........................................721
12.2. Скелеты...................................................................................................................................722
12.2.1. Скелетная иерархия............................................................................................723
12.2.2. Представление скелета в памяти...................................................................723
12.3. Позы и положения..............................................................................................................724
12.3.1. Поза привязки......................................................................................................725
12.3.2. Локальные позы...................................................................................................725
12.3.3. Глобальные позы..................................................................................................728
12.4. Клипы......................................................................................................................................729
12.4.1. Локальная временная шкала...........................................................................730
12.4.2. Глобальная временная шкала..........................................................................734
12.4.3. Сравнение глобального и локального таймеров.......................................736
12.4.4. Простой формат анимационных данных....................................................739
12.4.5. Непрерывные канальные функции...............................................................740
12.4.6. Метаканалы...........................................................................................................741
12.4.7. Отношения между мешами, скелетами и клипами...................................... 742
12.5. Скининг и генерация палитры матриц........................................................................744
12.5.1. Сведения о скининге для отдельной вершины.........................................744
12.5.2. Математический аспект скининга.................................................................745
12.6. Слияние анимации.............................................................................................................749
12.6.1. Линейная интерполяция...................................................................................749
12.6.2. Способы применения слияния методом LERP........................................751
12.6.3. Сложные слияния методом LERP.................................................................756
12.6.4. Частичное скелетное слияние.........................................................................760
12.6.5. Аддитивное слияние...........................................................................................761
12.6.6. Способы применения аддитивного слияния.............................................764
12.7. Постобработка......................................................................................................................766
12.7.1. Процедурная анимация.....................................................................................766
12.7.2. Инверсная кинематика......................................................................................767
12.7.3. Тряпичные куклы................................................................................................769
12.8. Методы сжатия....................................................................................................................769
12.8.1. Пропуск каналов..................................................................................................769
12.8.2. Квантование..........................................................................................................770
12.8.3. Частота дискретизации и пропуск семплов...............................................774
12.8.4. Сжатие на основе кривых.................................................................................774
12.8.5. Сжатие с использованием вейвлетов...........................................................775
12.8.6. Выборочные загрузка и потоковая передача.............................................775
12.9. Конвейер анимации............................................................................................................775
12.10.Конечные автоматы действий.........................................................................................778
12.10.1. Подход с плоским средним взвешенным....................................................779
12.10.2. Деревья слияния..................................................................................................783
12.10.3. Параметры состояния и дерева слияния.....................................................787
12.10.4. Переходы................................................................................................................792
12.10.5. Управляющие параметры.................................................................................795
12.11.Ограничения.........................................................................................................................797
12.11.1. Крепления..............................................................................................................797
12.11.2. Выравнивание объектов....................................................................................798
12.11.3. Инверсная кинематика движений захвата рукой....................................802
12.11.4. Извлечение движений и инверсная кинематика ног..............................803
12.11.5. Другие виды ограничений................................................................................805
Глава 13. Столкновения и динамика твердого тела................................................................807
13.1. Нужна ли в вашей игре физика?....................................................................................808
13.1.1. Что можно делать с системой симуляции физики................................... 808
13.1.2. Делает ли физика игру интересной?............................................................809
13.1.3. Влияние физики на игру...................................................................................810
13.2. Промежуточный слой для столкновений/физики..................................................813
13.2.1. ODE..........................................................................................................................813
13.2.2. Bullet........................................................................................................................813
13.2.3. TrueAxis...................................................................................................................814
13.2.4. PhysX.......................................................................................................................814
13.2.5. Havok.......................................................................................................................814
13.2.6. Physics Abstraction Layer (PAL).....................................................................814
13.2.7. Digital Molecular Matter....................................................................................815
13.3. Система обнаружения столкновений...........................................................................815
13.3.1. Элементы, которые могут сталкиваться между собой...........................816
13.3.2. Мир столкновений/физики.............................................................................817
13.3.3. Концепции геометрических форм.................................................................819
13.3.4. Примитивы столкновения................................................................................820
13.3.5. Проверки на столкновение и аналитическая геометрия.......................825
13.3.6. Оптимизация производительности..............................................................834
13.3.7. Запросы о столкновениях.................................................................................836
13.3.8. Фильтрация столкновений..............................................................................840
13.4. Динамика твердого тела....................................................................................................842
13.4.1. Некоторые основы..............................................................................................843
13.4.2. Линейная динамика............................................................................................845
13.4.3. Решение уравнений движения........................................................................847
13.4.4. Численное интегрирование..............................................................................849
13.4.5. Угловая динамика в двухмерном пространстве........................................853
13.4.6. Угловая динамика в трехмерном пространстве........................................857
13.4.7. Реакция на столкновение.................................................................................862
13.4.8. Ограничения.........................................................................................................869
13.4.9. Управление движениями твердых тел.........................................................873
13.4.10. Отдельный шаг симуляции столкновений/физики................................875
13.5. Интеграция физического движка в игру....................................................................877
13.5.1. Связывание игровых объектов и твердых тел...........................................877
13.5.2. Обновление симуляции....................................................................................882
13.5.3. Пример использования систем столкновений и физики в игре.........885
13.6. Расширенные физические возможности....................................................................894
Глава 14. Звук......................................................................................................................................896
14.1. Физика звука........................................................................................................................897
14.1.1. Свойства звуковых волн...................................................................................897
14.1.2. Субъективная громкость звука и децибел..................................................899
14.1.3. Распространение звуковой волны.................................................................901
14.1.4. Восприятие положения в пространстве...................................