MINI DOOM современный С++ через игру том 3 третье измерение
MINI DOOM современный С++ через игру том 3 третье измерение

Полная версия

MINI DOOM современный С++ через игру том 3 третье измерение

Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
2 из 2

Строка 47. Если за 256 шагов стены не нашлось, сдаёмся. На нашей карте такого не бывает: за краем Map::at возвращает стену. Но если кто-то нарисует карту 1000 × 1000 без внешних стен, игра не зависнет.

Проверяем на настоящей карте

Бросим несколько лучей из стартовой клетки (1,5; 1,5) первого уровня, где ответ легко посчитать в уме, — листинг 15.4.



Листинг 15.4 — Автотест: лучи из стартовой клетки



Листинг 15.4 (продолжение) — Автотест: лучи из стартовой клетки


— east. Первая стена справа в строке 1 — клетка (7, 1). Её левая грань — линия x = 7, до неё 7 − 1,5 = 5,5. Грань вертикальная, side 0.

— south. Вниз по столбцу 1 стена в строке 6, верхняя грань y = 6, до неё 4,5. Грань горизонтальная, side 1.

— west. Стена сразу слева, до линии x = 1 полклетки.

— south-east. Наискосок луч прошёл ровно через угол клеток и упёрся в колонну (3, 3). 2,121 — это 1,5 × √2: полторы клетки по x и полторы по y.

— east x2. Тот же луч на восток, но вектор длиной 2. Стена та же, а dist — 2,75, вдвое меньше.



Чтобы найти саму точку попадания, достаточно пройти от начала вдоль вектора dist его длин: (ox + dx × dist, oy + dy × dist). Длина вектора при этом неважна — она сокращается.

Веер лучей

Глаз видит не одну точку, а сектор. В Doom он примерно 90° в ширину. Можно было бы бросать лучи под равными углами, но в 3D-графике принято иначе, и в главе 16 станет понятно почему. Перед игроком на расстоянии 1 ставим воображаемое окно камеры — отрезок, перпендикулярный взгляду. Его половина — вектор (−dirY, dirX) × 0,8, тот самый «вправо» из главы 14. Лучи идут из глаза через равномерно расставленные точки этого окна, рисунок 15.2.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Конец ознакомительного фрагмента
Купить и скачать всю книгу
На страницу:
2 из 2