C ++ OpenSceneGraph更改相机眼高

时间:2012-11-28 22:31:23

标签: c++ openscenegraph

编写一个小的openscenegraph应用程序,并且需要一种方法来改变Camera高度。从本质上讲,眼睛直视空间中的球。我想要做的是能够降低相机高度,这样我才能从下面看球,并且如果需要的话还可以提高相机高度。如何使用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();
}

2 个答案:

答案 0 :(得分:3)

您需要接管osgViewer::Camera的控制权,不应该尝试使用基本的OpenGL来执行此操作。

osgViewer::Viewer::getCameraWithFocus可以让你拿到相机。从这里您可以设置相机的位置和外观。

请记住,在您所拥有的基本应用程序中,相机操作器正在每帧设置一次相机的位置(基于鼠标交互)。

您需要决定如何处理鼠标输入并可能接管Camera Manipulator正在执行的任务。

答案 1 :(得分:0)

在Camera对象上使用setViewMatrixAsLookAt方法(link)。此方法有三个参数:

  • eye:相机的位置 - 您可以使用它来设置其高度。
  • center:您的相机正在查看的点 - 将其设置为被观察物体的中心。
  • up:相机的向上矢量 - 控制视口在中心周围的旋转方式,在传统的图形坐标系中应该等于[0,1,0]。

因为这个方法通过指定的点来处理相机的旋转,所以你应该只修改eye向量的y坐标来完成你的任务。 '要求。

您可以在“查看”向量三元组here上查看更多详细信息。