• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            osgviewerQt

            #include <QTimer>
            #include <QApplication>
            #include <QGridLayout>
            #include <osgViewer/CompositeViewer>
            #include <osgViewer/ViewerEventHandlers>
            #include <osgGA/MultiTouchTrackballManipulator>
            #include <osgDB/ReadFile>
            #include <osgQt/GraphicsWindowQt>
            #include <iostream>
            class ViewerWidget : public QWidget, public osgViewer::CompositeViewer
            {
            public:
                ViewerWidget(QWidget* parent = 0, Qt::WindowFlags f = 0, osgViewer::ViewerBase::ThreadingModel threadingModel=osgViewer::CompositeViewer::SingleThreaded) : QWidget(parent, f)
                {
                    setThreadingModel(threadingModel);
                    // disable the default setting of viewer.done() by pressing Escape.
                    setKeyEventSetsDone(0);
                    QWidget* widget1 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("cow.osgt") );
                    QWidget* widget2 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("glider.osgt") );
                    QWidget* widget3 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("axes.osgt") );
                    QWidget* widget4 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("fountain.osgt") );
                    QWidget* popupWidget = addViewWidget( createGraphicsWindow(900,100,320,240,"Popup window",true), osgDB::readNodeFile("dumptruck.osgt") );
                    popupWidget->show();
                    QGridLayout* grid = new QGridLayout;
                    grid->addWidget( widget1, 0, 0 );
                    grid->addWidget( widget2, 0, 1 );
                    grid->addWidget( widget3, 1, 0 );
                    grid->addWidget( widget4, 1, 1 );
                    setLayout( grid );
                    connect( &_timer, SIGNAL(timeout()), this, SLOT(update()) );
                    _timer.start( 10 );
                }
                QWidget* addViewWidget( osgQt::GraphicsWindowQt* gw, osg::Node* scene )
                {
                    osgViewer::View* view = new osgViewer::View;
                    addView( view );
                    osg::Camera* camera = view->getCamera();
                    camera->setGraphicsContext( gw );
                    const osg::GraphicsContext::Traits* traits = gw->getTraits();
                    camera->setClearColor( osg::Vec4(0.2, 0.2, 0.6, 1.0) );
                    camera->setViewport( new osg::Viewport(0, 0, traits->width, traits->height) );
                    camera->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(traits->width)/static_cast<double>(traits->height), 1.0f, 10000.0f );
                    view->setSceneData( scene );
                    view->addEventHandler( new osgViewer::StatsHandler );
                    view->setCameraManipulator( new osgGA::MultiTouchTrackballManipulator );
                    gw->setTouchEventsEnabled( true );
                    return gw->getGLWidget();
                }
                osgQt::GraphicsWindowQt* createGraphicsWindow( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=false )
                {
                    osg::DisplaySettings* ds = osg::DisplaySettings::instance().get();
                    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
                    traits->windowName = name;
                    traits->windowDecoration = windowDecoration;
                    traits->x = x;
                    traits->y = y;
                    traits->width = w;
                    traits->height = h;
                    traits->doubleBuffer = true;
                    traits->alpha = ds->getMinimumNumAlphaBits();
                    traits->stencil = ds->getMinimumNumStencilBits();
                    traits->sampleBuffers = ds->getMultiSamples();
                    traits->samples = ds->getNumMultiSamples();
                    return new osgQt::GraphicsWindowQt(traits.get());
                }
                virtual void paintEvent( QPaintEvent* event )
                { frame(); }
            protected:
                QTimer _timer;
            };
            int main( int argc, char** argv )
            {
                osg::ArgumentParser arguments(&argc, argv);
            #if QT_VERSION >= 0x050000
                // Qt5 is currently crashing and reporting "Cannot make QOpenGLContext current in a different thread" when the viewer is run multi-threaded, this is regression from Qt4
                osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::SingleThreaded;
            #else
                osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext;
            #endif
                while (arguments.read("--SingleThreaded")) threadingModel = osgViewer::ViewerBase::SingleThreaded;
                while (arguments.read("--CullDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext;
                while (arguments.read("--DrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::DrawThreadPerContext;
                while (arguments.read("--CullThreadPerCameraDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullThreadPerCameraDrawThreadPerContext;
            #if QT_VERSION >= 0x040800
                // Required for multithreaded QGLWidget on Linux/X11, see http://blog.qt.io/blog/2011/06/03/threaded-opengl-in-4-8/
                if (threadingModel != osgViewer::ViewerBase::SingleThreaded)
                    QApplication::setAttribute(Qt::AA_X11InitThreads);
            #endif
                
                QApplication app(argc, argv);
                ViewerWidget* viewWidget = new ViewerWidget(0, Qt::Widget, threadingModel);
                viewWidget->setGeometry( 100, 100, 800, 600 );
                viewWidget->show();
                return app.exec();
            }

            posted on 2017-07-23 20:48 zmj 閱讀(1259) 評論(0)  編輯 收藏 引用

            久久精品国产69国产精品亚洲| 国产99久久久国产精品小说| 亚洲乱码精品久久久久..| 岛国搬运www久久| 日日狠狠久久偷偷色综合0| 久久免费99精品国产自在现线| 精品一区二区久久| 国产精品99久久久久久董美香| 久久99国产精品成人欧美| 精品人妻伦九区久久AAA片69| 亚洲婷婷国产精品电影人久久| 亚洲香蕉网久久综合影视| 99久久国产热无码精品免费久久久久| 蜜臀久久99精品久久久久久| 欧美va久久久噜噜噜久久| 久久久99精品成人片中文字幕| 无码人妻久久一区二区三区| 久久久久国色AV免费看图片| 天天久久狠狠色综合| 欧洲成人午夜精品无码区久久| 99久久做夜夜爱天天做精品| 99热精品久久只有精品| 国产精品福利一区二区久久| 精品久久久久久久久午夜福利| 合区精品久久久中文字幕一区 | 亚洲国产精品久久电影欧美| 看全色黄大色大片免费久久久| 久久久久国产亚洲AV麻豆| 精品无码久久久久久久久久| 狠狠干狠狠久久| 亚洲精品国精品久久99热| 天天爽天天狠久久久综合麻豆| 国产99精品久久| 欧洲性大片xxxxx久久久| 久久婷婷是五月综合色狠狠| 久久只有这精品99| 久久99久久99精品免视看动漫| 久久久久久国产精品免费免费| 蜜臀久久99精品久久久久久| 91精品国产综合久久久久久| 91久久成人免费|