Последние новости
Заявление о конфиденциальности "Vyacheslav Sustavov"
NoteKey приложение для Android получил функцию генерации паролей.
Набор кодеков K-Lite Codec обеспечит воспроизведение всех аудио и видео форматов на вашем компьютере.
Amazon выпустил свой бесплатный игровой движок.
Приложение "КапиталЪ" это мое второе приложение. Идея данного приложения у меня давно блуждала в голове. Теперь она реализована.

Векторы в игровом пространстве

Здравствуйте уважаемые читатели Gears of Game.

Сегодня мы поговорим о применении векторов в игровом пространстве.

Что дает нам эта статья?

  • Базовые понятия векторов;
  • Операции, выполняемые над векторами;
  • Понимание как их использовать в игровых приложениях;

На какие вопросы отвечает статья?

  • Что такое вектор.
  • Что такое равенство векторов.
  • Вычисление модуля вектора
  • Нормализация вектора.
  • Сложение Векторов.
  • Вычитание векторов.
  • Умножение векторов на скаляр.
  • Скалярное произведение векторов.
  • Векторное произведение.
  • Применение векторов в компьютерных играх.
Что такое вектор.

Геометрически вектор можно представить как отрезок, имеющий направление. Каждый вектор имеет два свойства: длину (также называется нормой или модулем вектора) и направление. Поэтому векторы очень удобно использовать для моделирования физических величин, которые характеризуются длиной и направлением.

вектор

Векторы, определенные независимо от системы координат, называются свободными.

Если вектор располагается в системе координат, то его координаты называются компонентами. Векторы, имеющие одинаковую длину и одно направление, являются равными.

Что такое равенство векторов.

В геометрии два вектора считаются равными, если они указывают в одном и том же направлении и имеют одинаковую длину. В алгебре векторы считаются одинаковыми только в том случае, если количество их измерений и компонентов равны.

Приведем пример:

вектор (Ax ,Ay , Az) = вектору (Bx, By, Bz) если Ax = Bx, Ay = By, Az = Bz

Вычисление модуля вектора.

Геометрия гласит, что модулем вектора считается длина направленного отрезка. В алгебре расчет модуля вектора производится по формуле:

Для двухмерного пространства:

|A| = sqrt( (Ax2) + (Ay2) );

Для трехмерного пространства:

|A| = sqrt( (Ax2 ) + (Ay2) + (Az2) );

Модуль вектора равен квадратному корню из суммы квадратов элементов вектора.

Нормализация вектора.

Нормализация вектора — это приведение модуля вектора к единице при сохранении исходного направления. Нормализация вектора производится делением каждого компонента на модуль вектора.

Приведем пример

для двухмерного пространства:

A = A /|A| = (Ax / |A|, Ay / |A|);

Приведем пример для трехмерного пространства:

A = A /|A| = (Ax / |A|, Ay / |A|, Az / |A|);

Сложение Векторов.

Сложение векторов возможно при условии, если их размерность совпадает.

Для двухмерного пространства:

A + B = ( Ax + Bx, Ay + By);

Для трехмерного пространства:

A + B = ( Ax + Bx, Ay + By, Az + Bz);

Вычитание векторов.

Вычитание векторов производится путем вычитания отдельных компонентов, при этом оба вектора должны иметь одинаковую размерность.

Пример:

для двухмерного пространства:
A - B = A + (-B) = ( Ax + Bx, Ay + By);

для трехмерного пространства:
A - B = A + (-B) = ( Ax + Bx, Ay + By, Az + Bz);

Умножение векторов на скаляр.

Умножение вектора на скаляр приводит к масштабированию вектора. Если масштабный множитель имеет положительное значение, в этом случае направление не меняется.

Если знак множителя имеет отрицательное значение, то направление вектора меняется на противоположное.

вектор рис.1

Пример умножения векторов на скаляр:

для двухмерного пространства:
A * v = (Ax * v, Ay * v);

для трехмерного пространства:
A * v = (Ax * v, Ay * v, Az * v);

Скалярное произведение векторов.

Скалярное произведение векторов вычисляется следующим образом:

для двухмерного пространства:
A * V = Ax * Vx + Ay * Vy;

для трехмерного пространства:
A * V = Ax * Vx + Ay * Vy + Az * Vz;

Полезные свойства скалярного произведения:

  • Если A* V = 0, значит A перпендикулярен V
  • Если A * V > 0, значит угол ф между двумя векторами меньше 90 градусов.
  • Если A * V < 0, значит угол ф между двумя векторами больше 90 градусов.
Векторное произведение

Результатом векторного произведения, в отличии от скалярного, будет вектор. Векторным произведением двух векторов A и B будет вектор C, который взаимно перпендикулярен для векторов A и B.

Пример:

для двухмерного пространства Az = 0 и Bz = 0:

С = A * B = (Ay *Bz - Az * By), (Az *Bx - Ax* Bz),(Ax *By - Ay* Bx)

для трехмерного пространства:
С = A * B = (Ay *Bz - Az * By), (Az *Bx - Ax* Bz),(Ax *By - Ay* Bx)

Применение векторов в компьютерных играх.

Назначение вектора в компьютерных играх является очень разнообразным. Векторами описывают направление, скорость, местоположение. В начале данной статьи было дано определение вектора как направленного отрезка, также мы рассмотрели какие операции можно совершать с векторами. Теперь нам предстоит научиться их использовать по назначению.

вектор рис.2

Если вектор рассматривать как вектор местоположения, то при его помощи можно определить на каком расстоянии игрок находится от объекта. Если вектор использовать для скорости движения, то он будет указывать скорость движения объекта за момент времени. Если вектор рассматривать как на правление, то вектор будет указывать направление движения. По сути, вектор - это объект, который может использоваться в различных ситуациях в зависимости от необходимости расчета. Вектор может использоваться для расчета физических сил, которые оказывают действия на объект. Следовательно можно сделать вывод, что вектор - это абстрактный объект, имеющий направление и длину.

Пример расчета скорости пули.

Рассмотри ситуацию из игры, когда пушка стреляет на опережение движущийся цели. Нам нужно узнать попадет снаряд в цель или нет. Определимся с объектами которые у нас имеются.

  • Снаряд;
  • Объект;

вектор рис.3
Снаряд имеет скорость движения, направление.
Объект имеет скорость движения, направление.

Скорость движения снаряда равна 2 метра в секунду, это вектор который задает скорость. V(снаряда) = 2 м/с.
Скорость движения объекта равна 1 метру в секунду, это вектор задающий скорость объекта. V(объекта) = 1 м/с.

Т.е. получается что за один кадр снаряд перемещается на 2 метра игрового пространства, а объект на 1 метр. Попробуем ответить на вопрос, через сколько кадров траектория снаряда пересечется с траекторией движения объекта и произойдет ли столкновение?

Для этого зададим начальные координаты для снаряда и объекта. Пусть начальные координаты снаряда будут (0;0), объекта (20;10). Теперь зная начальные координаты, скорость и направление объектов, мы можем произвести расчет. Для этого воспользуемся операцией сложения векторов. Определим имена переменных для каждого вектора. Пусть вектором местоположения снаряда будет M1, скорости V1. Вектором местоположения объекта M2, а его скорости V2.

Мы знаем что M1(0;0), V1(2;0), M2(20;10), V2(0;-1)

Рассчитаем изменение места положения объектов для первого кадра. Для этого сложим вектора месторасположения и вектора скорости между собой.

1-й кадр

M1 = (0 + 2 ; 0 + 0 )= (2;0) M2= (20 + 0 ; 10 +(-1) ) = (20;9)

2-й кадр

M1 = (2 + 2 ; 0 + 0 )= (4;0) M2= (20 + 0 ; 9 +(-1) ) = (20;8)

3-й кадр

M1 = (4 + 2 ; 0 + 0 )= (6;0) M2= (20 + 0 ; 8 +(-1) ) = (20;7)

4-й кадр

M1 = (6 + 2 ; 0 + 0 )= (8;0) M2= (20 + 0 ; 7 +(-1) ) = (20;6)

5-й кадр

M1 = (8 + 2 ; 0 + 0 )= (10;0) M2= (20 + 0 ; 6 +(-1) ) = (20;5)

6-й кадр

M1 = (10 + 2 ; 0 + 0 )= (12;0) M2= (20 + 0 ; 5 +(-1) ) = (20;4)

7-й кадр

M1 = (12 + 2 ; 0 + 0 )= (14;0) M2= (20 + 0 ; 4 +(-1) ) = (20;3)

8-й кадр

M1 = (14 + 2 ; 0 + 0 )= (16;0) M2= (20 + 0 ; 3 +(-1) ) = (20;2)

9-й кадр

M1 = (16 + 2 ; 0 + 0 )= (18;0) M2= (20 + 0 ; 2 +(-1) ) = (20;1)

10-й кадр

M1 = (18+ 2 ; 0 + 0 )= (20;0) M2= (20 + 0 ; 1+(-1) ) = (20;0)

Все! На десятом кадре происходит совпадение координат снаряда и объекта, после чего можно уверенно сказать, что наша пушка отличается отменной точностью при стрельбе на опережение.

Данный пример является очень простым, скорость снаряда и скорость объекта является постоянной, а также не учтены многие физические факторы, влияющие на снижение скорости снаряда. Но при всех этих недостатках, на данном примере мы рассмотрели практическое применение векторов в игровых приложениях.

Из примера мы видим, что нам потребуется всего десять кадров или итераций для отображения всех действий на экране. Но этого слишком мало для компьютерной игры, мы не успеем моргнуть глазом как все произойдет.

И так, у нас появилась новая задача: замедлить все действия происходящие на экране. Для этого нам понадобиться операция умножения вектора на скаляр. Используя операцию умножения на скаляр, мы сможем замедлить скорость движения объектов на экране, также это можно использовать для создания сопротивлений воздуха, силы трения и других сил.

Пример использования умножения на скаляр:

V1(2;0), V2(0;-1)
V1 * 0,2 = (2 * 0,2 ; 0 * 0,2) = (0,4 ; 0);
V2 * 0,2 = (0 * 0,2 ; -1 * 0,2) = (0; -0,2);

Теперь подведем итоги нашей статьи. Сегодня мы разобрались с понятиями векторов, научились выполнять операции над ними, а также рассмотрели пример их использования в играх. В следующей статье мы будем разбираться с понятием матриц и кватернионов.

Оставляйте комментарии или пишите на почту gearsofgame@mail.ru, до новых встреч!
Комментарии: