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


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


/p>


Как и в случае с поворотами камеры, для наземных объектов мы вносим ряд ограничений. К примеру, объекты 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; }





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