osg demo24 多窗口渲染

来源:互联网 发布:jquery map 清空数据 编辑:程序博客网 时间:2024/06/05 10:19
#include <osgDB/ReadFile>#include <osgDB/WriteFile>#include <osgViewer/Viewer>#include <osgGA/TrackballManipulator>#include <osgGA/FlightManipulator>#include <osgGA/AnimationPathManipulator>#include <iostream>//实现多窗口渲染void multipleWindowMultipleCameras(osgViewer::Viewer& viewer,bool multipleScreens){osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();unsigned int width,height;wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0),width,height);//窗口数量unsigned int numCameras = 6;//缩放比率double aspectRatioScale = (double)numCameras;double translate_x = double(numCameras-1);//创建留个图形上下文for(unsigned int i=0;i<numCameras;++i,translate_x-=2.0){osg::ref_ptr<osg::GraphicsContext::Traits>traits = new osg::GraphicsContext::Traits;traits->screenNum = multipleScreens?i/3:0;traits->x=(i*width)/numCameras;traits->y = 0;traits->width = width/numCameras-1;traits->height = height;//这个设置窗口要有边框修饰,否则不设置边框traits->windowDecoration=true;traits->doubleBuffer = true;traits->sharedContext = 0;osg::ref_ptr<osg::GraphicsContext>gc = osg::GraphicsContext::createGraphicsContext(traits.get());//每一个对应一个窗口osg::ref_ptr<osg::Camera>camera  =new osg::Camera;camera->setGraphicsContext(gc.get());camera->setViewport(new osg::Viewport(0,0,width/numCameras,height));GLenum buffer = traits->doubleBuffer?GL_BACK:GL_FRONT;camera->setDrawBuffer(buffer);camera->setReadBuffer(buffer);viewer.addSlave(camera.get(),osg::Matrix::scale(aspectRatioScale,1.0,1.0)*osg::Matrix::translate(translate_x,0.0,0.0),osg::Matrix());}}int main(){osgViewer::Viewer viewer;multipleWindowMultipleCameras(viewer,false);viewer.setSceneData(osgDB::readNodeFile("glider.osg"));viewer.realize();viewer.run();return 0;}

0 0
原创粉丝点击