Примитивное управление камерой в Ogre3D

Задача: камера должна наблюдать за объектом, быть на расстоянии 5 метров от него и не менее 2.5 метров над землей.

Решение:

void initialise()
{
    // Включаем слежение за объектом
    camera->setAutoTracking(true, target)
}
 
void update()
{
    // Нормаль направления цели
    Vector3 targetDir = target->getOrientation() * Vector3::UNIT_Z).normalisedCopy();
    // Позиция цели
    Vector3 targetPos = target->getPosition();
    // Позиция камеры
    Vector3 cameraPos = camera->getPosition();
    // Нормаль от цели к камере
    Vector3 targetToCameraDir = (cameraPos - targetPos).normalisedCopy();
 
    // Ставим камеру в координаты цели
    cameraPos = targetPos;
    // Сдвигаем камеру в направлении targetToCameraDir на 5 метров
    cameraPos += 5.0f * targetToCameraDir;
    // Регулируем высоту камеры
    cameraPos.y = std::max(2.5f, cameraPos.y);
 
    // Обновляем позицию камеры
    camera->setPosition(cameraPos);
}
2 комментария
  1. написал(а) Darkhac (18 января 2012, 15:39)

    Спасибо, полезный код. правда как-то все никак не могу понять как сделать чтобы камера смотрела с противоположной стороны объекта(не на лицо а на спину к примеру)

    1. написал(а) eJ (18 января 2012, 18:13)

      Для противоположной стороны надо смотреть в сторону Ogre::Vector3::reflect( const Ogre::Vector3 & normal )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Блог Евгения Жирнова