netlib.narod.ru | < Назад | Оглавление | Далее > |
Предположим, что в разрабатываемой нами игре игрок стреляет из ружья в противника. Как определить попала ли в цель пуля, выпущенная из заданной точки в указанном направлении? Один из возможных подходов: моделирование траектории пули с помощью луча и моделирование врага с помощью ограничивающей сферы (bounding sphere). (Ограничивающая сфера — это просто сфера минимального диаметра, в которую помещается весь объект целиком, что позволяет приблизительно представить занимаемый им объем. Более подробно об ограничивающих сферах мы поговорим в главе 11.) Тогда с помощью математических вычислений мы можем определить пересекает ли луч сферу и, если да, то где. В данном разделе мы обсудим математическую модель лучей.
Луч описывается путем указания начальной точки и направления. Параметрическая формула луча выглядит следующим образом:
Рис. 14. Луч, заданный начальной точкой p0 и вектором направления u. Мы можем генерировать точки луча, подставляя в формулу различные значения t, которые должны быть больше или равны нулю |
В формуле луча p0 — это начальная точка, u — это вектор, задающий направление луча, а t — это параметр. Подставляя различные значения t, мы сможем получать координаты различных точек луча. Причем для луча значение t должно находиться в диапазоне [0, ∞). Значения меньше нуля приведут к вычислению координат точек, находящихся за лучом (на прямой, частью которой является луч). Фактически, если t принимает значения из диапазона (–∞, ∞), мы получаем линию в трехмерном пространстве.
Предположим, у нас есть луч p(t) = p0 + tu и плоскость n Ч p + d = 0, и мы хотим определить пересекает ли луч плоскость и, если да, то вычислить координаты точки пересечения. Для этого мы помещаем формулу луча в формулу плоскости и вычисляем такое значение параметра t, которое удовлетворяет уравнению плоскости. Подстановка найденного значения в уравнение луча позволяет вычислить координаты точки пересечения.
Подставляем формулу (9) в формулу плоскости:
Подставляем уравнение луча в формулу плоскости. |
|
|
|
Раскрываем скобки. |
|
|
|
Выносим за скобки переменную. |
|
Решение для t. |
Если значение t не находится в диапазоне [0, ∞), значит луч не пересекает плоскость.
Если значение t находится в диапазоне [0, ∞), точка пересечения находится путем подстановки найденного значения параметра в формулу луча:
netlib.narod.ru | < Назад | Оглавление | Далее > |