自定义OSG窗口大小(设置Osgiewer)

自定义窗口大小并且让定义在自定义窗口的什么位置显示,窗口可以拖动。

 1 #include <osgDB/ReadFile>
 2 #include <osgUtil/Optimizer>
 3 #include <osgViewer/Viewer>
 4 #include <osgViewer/ViewerEventHandlers>
 5 #include <iostream>
 6  
 7 void main( )
 8 {
 9      osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg");
10      osgViewer::Viewer viewer;
11      {
12          osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
13          traits->x = 40;
14          traits->y = 40;
15          traits->width = 600;
16          traits->height = 480;
17          traits->windowDecoration = true;
18          traits->doubleBuffer = true;
19          traits->sharedContext = 0;
20  
21          osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
22  
23          osg::ref_ptr<osg::Camera> camera = new osg::Camera;
24          camera->setGraphicsContext(gc.get());
25          camera->setViewport(new osg::Viewport(0,0, traits->width, traits->height));
26          GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
27          camera->setDrawBuffer(buffer);
28          camera->setReadBuffer(buffer);
29  
30          // add this slave camera to the viewer, with a shift left of the projection matrix
31          viewer.addSlave(camera.get());
32      }
33      osgUtil::Optimizer optimizer;
34      optimizer.optimize(loadedModel.get());
35      viewer.setSceneData(loadedModel.get());
36      viewer.run();
37 }

其中关键的是:

{
12          osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
13          traits->x = 40;
14          traits->y = 40;
15          traits->width = 600;
16          traits->height = 480;
17          traits->windowDecoration = true;
18          traits->doubleBuffer = true;
19          traits->sharedContext = 0;
20  
21          osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
22  
23          osg::ref_ptr<osg::Camera> camera = new osg::Camera;
24          camera->setGraphicsContext(gc.get());
25          camera->setViewport(new osg::Viewport(0,0, traits->width, traits->height));
26          GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
27          camera->setDrawBuffer(buffer);
28          camera->setReadBuffer(buffer);
29  
30          // add this slave camera to the viewer, with a shift left of the projection matrix
31          viewer.addSlave(camera.get());
32      }

 

posted @ 2013-03-31 22:02  清凉一夏o0  阅读(1652)  评论(0编辑  收藏  举报