|
我想实现改变摄像机的视点,同时又能通过鼠标拖动使模型移动,写了以下代码,实现了视点的改变,但鼠标拖拽失效了。
加上viewer.setCameraManipulator( new osgGA::TrackballManipulator );后鼠标可以拖拽了,但视点又恢复到了默认。
我需要使用逐帧渲染,所以不能使用viewer.run()方式。
请赐教!
int main(int argc,char** argv)
{
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Node> node;;
osgDB::ReaderWriter::ReadResult rr = osgDB::Registry::instance()->readNode("cow.osg", osgDB::Registry::instance()->getOptions() );
node = rr.takeNode();
node->setDataVariance( osg::Object:YNAMIC );
viewer.setSceneData(node);
viewer.getCamera()->setViewport( new osg::Viewport(0, 0, 1000, 560) );
viewer.getCamera()->setProjectionMatrixAsPerspective( 40., 1., 1., 100. );
// 创建矩阵,指定到视点的距离。
osg::Matrix trans;
trans.makeTranslate( 0., 0., -12. );
//// 旋转一定角度(弧度值)。
/*viewer.setCameraManipulator( new osgGA::TrackballManipulator );*/
// 创建旋转矩阵。
osg::Matrix rot;
rot.makeRotate( 1.0, osg::Vec3( 1, 0, 0. ) );
viewer.realize();
viewer.getCamera()->setViewMatrix( rot * trans );
while (!viewer.done())
{
// 绘制下一帧
viewer.frame();
}
} |
|