Написание небольшого приложения с открытым сценографом, и нужен способ изменить высоту камеры. По сути, глаз смотрит прямо на шар в пространстве. Что я хочу сделать, так это уметь уменьшать высоту камеры, чтобы я мог держать мяч снизу, а также поднимать высоту камеры, если мне это нужно. Как мне добиться этого с помощью кода 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();
}
Вы должны взять под свой контроль osgViewer::Camera
Вы не должны пытаться делать это с базовым OpenGL.
osgViewer::Viewer::getCameraWithFocus
должен достать тебе камеру. Отсюда вы можете установить положение и внешний вид камеры.
Имейте в виду, что в базовом приложении, как у вас там, манипулятор камеры устанавливает положение камеры (на основе взаимодействия с мышью) один раз за кадр.
Вам нужно будет решить, как вы хотите справиться с вводом мышью и, возможно, взять на себя задачу, которую выполняет Манипулятор камеры.
Использовать setViewMatrixAsLookAt
метод (ссылка на сайт) на вашей камере объекта. Этот метод принимает три параметра:
eye
: Положение вашей камеры — это вы можете использовать, чтобы установить ее высоту.center
: Точка, на которую смотрит ваша камера — установите ее в центр наблюдаемого объекта.up
: Вектор вверх вашей камеры — это контролирует, как ваш видовой экран будет вращаться вокруг своего центра и должен быть равен [0, 1, 0] в обычной графической системе координат.Потому что этот метод заботится о вращении камеры, указывая точку, в которой она Ищу, Вы должны изменить только Y-координату eye
вектор, чтобы выполнить то, что вы просите.
Вы можете увидеть более подробную информацию о векторной триплете ‘look at’ Вот.