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

            久久久久这里只有精品| 国产精品免费福利久久| 欧美成人免费观看久久| 人妻精品久久无码专区精东影业| 大伊人青草狠狠久久| 欧美大战日韩91综合一区婷婷久久青草 | 婷婷综合久久中文字幕| 国产精品久久久久a影院| 99久久久久| 无码国内精品久久人妻| 人妻精品久久久久中文字幕| AV无码久久久久不卡网站下载| 久久受www免费人成_看片中文| 国产∨亚洲V天堂无码久久久| 综合久久一区二区三区 | 国产亚洲美女精品久久久2020| 94久久国产乱子伦精品免费| 久久精品国产网红主播| A级毛片无码久久精品免费| 久久久精品国产亚洲成人满18免费网站| 亚洲中文字幕无码一久久区| 日本久久久久久久久久| 国产午夜精品理论片久久| 一本久久久久久久| 婷婷久久综合九色综合98| 99久久99久久精品免费看蜜桃| 伊人色综合久久天天人手人婷 | 久久精品国产亚洲av麻豆图片| 一极黄色视频久久网站| 精品久久久久成人码免费动漫| 一级A毛片免费观看久久精品| 久久久青草青青国产亚洲免观| 久久精品一区二区影院| 久久青青草原精品国产软件| 无码任你躁久久久久久| 久久久久久综合网天天| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 狠狠狠色丁香婷婷综合久久五月 | 无码精品久久一区二区三区 | 久久精品无码一区二区日韩AV| 久久久精品视频免费观看|