Установить положение орфографической камеры для отображения экстентов плоскости в OSG - PullRequest
1 голос
/ 13 марта 2019

У меня есть орфографическая камера в osg сцене.В этой сцене будут отображаться плоские объекты (плоскости), и я хочу, чтобы камера автоматически указывала на них, чтобы их можно было видеть в лоб, а также увеличивала масштаб, чтобы показать как можно большую часть плоскости.насколько это возможно, не обрезая края.

Пока я правильно ориентируюсь, чтобы смотреть на плоскость:

        osg::Vec3d eye; // dummy
        osg::Vec3d center; // we only really care about this here
        osg::Vec3d up; // dummy

        cameraManipulator->getViewMatrixAsLookAt(eye, center, up);

        osg::Vec3d desiredVec(velocityX, velocityY, velocityZ); // velocity of the plane I want to look at

        desiredVec.normalize();
        desiredVec = -desiredVec; // invert
        desiredVec += center; // align

        cameraManipulator->setViewMatrixAsLookAt(desiredVec, center, osg::Vec3d(0, 0, -1));

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

            osg::Vec3d dir = desiredVec - center; // the direction (vector) in which we want to move

            dir.normalize();

            double scaleFactor = (width * height) / 2; // test

            desiredVec += (dir * scaleFactor); // add it to desiredVec to move back in that direction (by scaleFactor)

Похоже, что "тестовые" функции scaleFactor работают нормально, они дают вид плоскости с полем вокруг края.Я предполагаю, что это то, что нужно изменить.

По сути, как рассчитать расстояние, на которое нужно переместить камеру назад, чтобы просмотреть всю текущую плоскость?У меня есть информация о скорости, размере самолета и т. Д.

1 Ответ

0 голосов
/ 13 марта 2019

При использовании ортографической камеры размер визуализируемых объектов (эффект масштабирования) достигается не перемещением камеры, а размером усеченного проецирования, установленным на камере.Ни один из манипуляторов камеры OSG не реализует эффект масштабирования для орто камеры.См. Эту тему форума в качестве ссылки: http://forum.openscenegraph.org/viewtopic.php?t=10763&view=next

...