• <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) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品久久自在自线观看| 一本色道久久88精品综合| 久久亚洲AV成人出白浆无码国产| 亚洲va久久久噜噜噜久久男同| 久久久免费精品re6| 国产成人久久精品麻豆一区| 伊人久久国产免费观看视频| 久久久久久久亚洲Av无码| 精品久久久无码中文字幕| 久久久久亚洲精品日久生情 | 久久精品国产亚洲Aⅴ香蕉| 午夜精品久久久久| 色综合合久久天天综合绕视看| 少妇被又大又粗又爽毛片久久黑人 | 国产精品久久久久久吹潮| 久久久久久国产a免费观看不卡| 漂亮人妻被黑人久久精品| 久久精品国产亚洲7777| 久久精品国产99国产精品澳门| 伊人久久精品影院| 久久久久国产精品嫩草影院| 久久99中文字幕久久| 一本一本久久A久久综合精品| 激情综合色综合久久综合| 国产欧美久久久精品| 99精品国产综合久久久久五月天| 九九热久久免费视频| 99久久久国产精品免费无卡顿| 久久精品国产亚洲AV香蕉| 久久综合久久性久99毛片| 国产无套内射久久久国产| 狠狠色丁香婷婷综合久久来来去| 狠狠色丁香婷婷久久综合不卡 | 老司机国内精品久久久久| 色欲av伊人久久大香线蕉影院| 国产精品久久新婚兰兰| 久久无码人妻精品一区二区三区 | 91精品日韩人妻无码久久不卡| 97久久综合精品久久久综合| 99精品久久久久中文字幕| 99久久99这里只有免费的精品|