Задача: камера должна наблюдать за объектом, быть на расстоянии 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);
}
Спасибо, полезный код. правда как-то все никак не могу понять как сделать чтобы камера смотрела с противоположной стороны объекта(не на лицо а на спину к примеру)
Для противоположной стороны надо смотреть в сторону Ogre::Vector3::reflect( const Ogre::Vector3 & normal )