• <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 閱讀(1244) 評論(0)  編輯 收藏 引用

            波多野结衣AV无码久久一区| 青青热久久国产久精品| 久久精品久久久久观看99水蜜桃| 伊人久久大香线蕉成人| 国产精品久久久久无码av| 国产精品久久久久久久久| 中文字幕成人精品久久不卡| 中文字幕无码久久久| 精品久久久久久综合日本| 久久免费看黄a级毛片| 国产精品久久久久久久久鸭| 无码国内精品久久人妻麻豆按摩| 亚洲国产精品无码久久久秋霞2| 久久精品国产亚洲AV不卡| 99久久99这里只有免费费精品| 国产精品久久久久免费a∨| 久久无码AV中文出轨人妻| 国产精品99久久久久久猫咪 | 精品久久久久国产免费| 久久国产乱子伦精品免费强| 久久久久18| 精品久久久久久国产牛牛app| 无码国内精品久久人妻| 欧美与黑人午夜性猛交久久久| 久久精品国产亚洲综合色| 久久综合给合久久狠狠狠97色69| 一本色道久久99一综合| 欧美午夜A∨大片久久 | 亚洲国产美女精品久久久久∴| 国内精品久久久久国产盗摄| 97热久久免费频精品99| 成人久久免费网站| 久久久久精品国产亚洲AV无码| 国产福利电影一区二区三区久久久久成人精品综合 | 国产精品久久久久久久| 国产三级久久久精品麻豆三级| 日本欧美久久久久免费播放网| 无码人妻久久一区二区三区免费| 欧美亚洲国产精品久久| 久久无码中文字幕东京热| 久久久久精品国产亚洲AV无码|