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

       

Перемещение вдоль векторов ориентации камеры



Рисунок 12.7. Перемещение вдоль векторов ориентации камеры

<
Как и в случае с поворотами камеры, для наземных объектов мы вносим ряд ограничений. К примеру, объекты LANDOBJECT не могут находиться в воздухе, даже если верхний вектор изменяется в результате движения вперед или сдвига вбок. Следовательно, мы должны ограничить их перемещение плоскостью XZ. Но, поскольку наземные объекты могут изменять свою высоту, взбираясь на лестницы или холмы, мы предоставляем метод Camera::setPosition, позволяющий вручную разместить камеру в требуемом месте и на требуемой высоте.

Код реализации ходьбы, сдвига и полета выглядит следующим образом:

void Camera::walk(float units) { // Для наземных объектов перемещение только в плоскости xz if(_cameraType == LANDOBJECT) _pos += D3DXVECTOR3(_look.x, 0.0f, _look.z) * units;

if(_cameraType == AIRCRAFT) _pos += _look * units; }

void Camera::strafe(float units) { // Для наземных объектов перемещение только в плоскости xz if(_cameraType == LANDOBJECT) _pos += D3DXVECTOR3(_right.x, 0.0f, _right.z) * units;

if(_cameraType == AIRCRAFT) _pos += _right * units; }

void Camera::fly(float units) { if(_cameraType == AIRCRAFT) _pos += _up * units; }


Содержание раздела