Введение в программирование трехмерных игр с DX9

Медицинское освидетельствование купить по материалам сайта. | Биткоин деньги на сайте |

Векторы камеры определяют ее ориентацию и местоположение в мировой системе координат



Рисунок 12.1. Векторы камеры определяют ее ориентацию и местоположение в мировой системе координат



Рисунок 12.1. Векторы камеры определяют ее ориентацию и местоположение в мировой системе координат


Эти четыре описывающих камеру вектора позволяют выполнять с камерой следующие шесть операций:

  • Поворот относительно правого вектора (наклон).

  • Поворот относительно верхнего вектора (отклонение).

  • Поворот относительно вектора взгляда (вращение).

  • Сдвиг вдоль правого вектора.

  • Подъем вдоль верхнего вектора.

  • Передвижение вдоль вектора взгляда.

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

class Camera { public: enum CameraType { LANDOBJECT, AIRCRAFT };

Camera(); Camera(CameraType cameraType); ~Camera();

void strafe(float units); // влево/вправо void fly(float units); // вверх/вниз void walk(float units); // вперед/назад

void pitch(float angle); // вращение относительно правого вектора void yaw(float angle); // вращение относительно верхнего вектора void roll(float angle); // вращение относительно вектора взгляда

void getViewMatrix(D3DXMATRIX* V); void setCameraType(CameraType cameraType); void getPosition(D3DXVECTOR3* pos); void setPosition(D3DXVECTOR3* pos); void getRight(D3DXVECTOR3* right); void getUp(D3DXVECTOR3* up); void getLook(D3DXVECTOR3* look);

private: CameraType _cameraType; D3DXVECTOR3 _right; D3DXVECTOR3 _up; D3DXVECTOR3 _look; D3DXVECTOR3 _pos; };

В этом определении класса есть одна вещь, которую мы до сих пор не обсуждали — перечисление CameraType. Дело в том, что наша камера поддерживает две модели поведения: LANDOBJECT и AIRCRAFT. Модель AIRCRAFT позволяет свободно перемещаться в пространстве и предоставляет шесть степеней свободы. В то же время в ряде игр с видом от первого лица персонаж не может летать, и нам надо ограничить перемещение по соответствующей оси. Чтобы внести эти ограничения, достаточно указать для камеры тип LANDOBJECT, что будет показано в последующих разделах.





- Начало -  - Назад -  - Вперед -