• <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)  編輯 收藏 引用

            亚洲精品乱码久久久久久中文字幕 | 国产成人久久精品区一区二区| 亚洲va久久久噜噜噜久久狠狠 | 久久这里只有精品久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久天堂AV综合合色蜜桃网| av国内精品久久久久影院| 国产精品欧美久久久久无广告| 久久中文精品无码中文字幕 | 久久香蕉一级毛片| 亚洲伊人久久综合影院| 97久久综合精品久久久综合| 精品久久久久久久中文字幕 | 久久精品国产一区| 久久九九兔免费精品6| 狠狠色丁香久久综合婷婷| 伊人精品久久久久7777| 蜜桃麻豆www久久| 久久国语露脸国产精品电影| 九九久久99综合一区二区| 久久99热这里只有精品国产| 91久久精品国产91性色也| 亚洲人成精品久久久久| 一级女性全黄久久生活片免费| 久久香蕉一级毛片| 91久久香蕉国产熟女线看| 久久婷婷五月综合色奶水99啪| 久久婷婷人人澡人人| 99久久国产亚洲高清观看2024| 久久久久亚洲av无码专区喷水| 亚洲女久久久噜噜噜熟女| 亚洲va久久久久| 成人综合伊人五月婷久久| 久久精品无码一区二区app| 香港aa三级久久三级老师2021国产三级精品三级在 | 精品伊人久久久| 狠狠人妻久久久久久综合| 国产成人香蕉久久久久| 99久久精品国产一区二区| 伊人热人久久中文字幕| 成人国内精品久久久久影院VR|