|
同时按下ctrl和shift键(或者鼠标点击切换输入法)时,虽然图形还在刷新,但不接受事件(模型控制不了,程序中其他按钮点击无反应),
发现是由于添加了fbo相机,但只在控件或MFC中出现,控制台中不出现,为什么?
以下是在项目OsgActiveX的ViewGraphicsInit.cpp中添加fbo相机的代码:- // 同时按下ctrl和shift键(或者鼠标点击切换输入法)时,虽然图形还在刷新,但不接受事件(模型控制不了,程序中其他按钮点击无反应),
- // 由于添加了fbo相机,但只在控件或MFC中出现,控制台中不出现,为什么?
- osg::Camera* createFBO( osg::Camera* camera )
- {
- osg::ref_ptr<osg::Camera> fbo = new osg::Camera;
- fbo->setClearColor( camera->getClearColor() );
- fbo->setClearMask( GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT );
- fbo->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
- fbo->setRenderOrder( camera->getRenderOrder(), camera->getRenderOrderNum()+1 );
- fbo->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
- osg::Viewport* vp = camera->getViewport();
- fbo->setViewport( vp->x(), vp->y(), vp->width(), vp->height() );
- return fbo.release();
- }
- bool ViewGraphicsInit::setSceneData(const string& fileName)
- {
- OpenThreads::ScopedLock<OpenThreads::Mutex> slock(m_mutex);
- osg::Node* node = osgDB::readNodeFile(fileName);
- if ( node )
- {
- osg::Camera* camera = createFBO( m_refViewer->getCamera() );
- camera->addChild( node );
- osg::Group* root = new osg::Group;
- root->addChild( node );
- root->addChild( camera ); // 去掉本行,不添加fbo相机没问题
- m_refViewer->setSceneData( root );
- return true;
- }
- return false;
- }
复制代码 以下是程序压缩包:
OsgActiveX.rar
(521.39 KB, 下载次数: 134)
|
|