C ++ OpenSceneGraph Изменить высоту глаз камеры

Написание небольшого приложения с открытым сценографом, и нужен способ изменить высоту камеры. По сути, глаз смотрит прямо на шар в пространстве. Что я хочу сделать, так это уметь уменьшать высоту камеры, чтобы я мог держать мяч снизу, а также поднимать высоту камеры, если мне это нужно. Как мне добиться этого с помощью кода oPengl или OpenScenegraph?

int main(int argc, char* argv[])
{
osg::ref_ptr<osg::ShapeDrawable> shape2 = new osg::ShapeDrawable;
shape2->setShape( new osg::Sphere(osg::Vec3(3.0f, 0.0f, 0.0f),1.0f) );
shape2->setColor( osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) );
osg::ref_ptr<osg::Geode> root = new osg::Geode;
root->addDrawable( shape2.get() );///add first osgshapeDrawable2
osgViewer::Viewer viewer;
viewer.setSceneData( root.get() );///set the Geode as scenedata for the viewer
return viewer.run();
}

5

Решение

Вы должны взять под свой контроль osgViewer::CameraВы не должны пытаться делать это с базовым OpenGL.

osgViewer::Viewer::getCameraWithFocus должен достать тебе камеру. Отсюда вы можете установить положение и внешний вид камеры.

Имейте в виду, что в базовом приложении, как у вас там, манипулятор камеры устанавливает положение камеры (на основе взаимодействия с мышью) один раз за кадр.

Вам нужно будет решить, как вы хотите справиться с вводом мышью и, возможно, взять на себя задачу, которую выполняет Манипулятор камеры.

3

Другие решения

Использовать setViewMatrixAsLookAt метод (ссылка на сайт) на вашей камере объекта. Этот метод принимает три параметра:

  • eye: Положение вашей камеры — это вы можете использовать, чтобы установить ее высоту.
  • center: Точка, на которую смотрит ваша камера — установите ее в центр наблюдаемого объекта.
  • up: Вектор вверх вашей камеры — это контролирует, как ваш видовой экран будет вращаться вокруг своего центра и должен быть равен [0, 1, 0] в обычной графической системе координат.

Потому что этот метод заботится о вращении камеры, указывая точку, в которой она Ищу, Вы должны изменить только Y-координату eye вектор, чтобы выполнить то, что вы просите.

Вы можете увидеть более подробную информацию о векторной триплете ‘look at’ Вот.

0

По вопросам рекламы [email protected]