美文网首页OSG(OpenSceneGraph)
OSG 学习第二课:加载多个obj文件

OSG 学习第二课:加载多个obj文件

作者: sssssss_ | 来源:发表于2023-01-12 16:07 被阅读0次

    一、要导入的obj文件

    obj文件

    二、导入代码

    #include <osgDB/ReadFile>
    #include <osgViewer/Viewer>
    
    void main()
    {
        osgViewer::Viewer viewer;
        {
            /// 自定义OSG显示窗口大小
            osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
            traits->x = 40;
            traits->y = 40;
            traits->width = 600;
            traits->height = 480;
            traits->windowDecoration = true;
            traits->doubleBuffer = true;
            traits->sharedContext = 0;
            osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
            osg::ref_ptr<osg::Camera> camera = new osg::Camera;
            camera->setGraphicsContext(gc.get());
            camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
            GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
            camera->setDrawBuffer(buffer);
            camera->setReadBuffer(buffer);
            // add this slave camera to the viewer, with a shift left of the projection matrix
            viewer.addSlave(camera.get());
        }
    
        osgDB::Options* a = new osgDB::Options(std::string("noTriStripPolygons"));
        osg::ref_ptr<osg::Node> node1 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj", a);
        osg::ref_ptr<osg::Node> node2 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj", a);
        osg::ref_ptr<osg::Node> node3 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj", a);
        osg::ref_ptr<osg::Node> node4 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj");
        osg::ref_ptr<osg::Node> node5 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj");
        osg::ref_ptr<osg::Node> node6 = osgDB::readNodeFile("E:\\vs2022\\obj\\xx.obj");
        osg::Group* root = new osg::Group;
        root->addChild(node1);
        root->addChild(node2);
        root->addChild(node3);
        root->addChild(node4);
        root->addChild(node5);
        root->addChild(node6);
        viewer.setSceneData(root);
        viewer.realize();
        viewer.run();
    }
    

    三、效果图

    效果

    四、在多个obj文件的情况下平移

        osgDB::Options* a = new osgDB::Options(std::string("noTriStripPolygons"));
        osg::ref_ptr<osg::Node> node1 = osgDB::readNodeFile("E:\\vs2022\\obj\\xxx.obj", a);
    
        osg::MatrixTransform* t = new osg::MatrixTransform;
        t->setMatrix(osg::Matrix::translate(osg::Vec3d(1, 0, 0)));
        t->addChild(node1);
     
        osg::Group* root = new osg::Group;
        root->addChild(node1);
        root->addChild(t);
    
        viewer.setSceneData(root);
        viewer.realize();
        viewer.run();
    
    • 效果图


      平移

    相关文章

      网友评论

        本文标题:OSG 学习第二课:加载多个obj文件

        本文链接:https://www.haomeiwen.com/subject/axlwcdtx.html