OSG 學習第二課:加載多個obj文件

一、要導入的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();
  • 效果圖


    平移
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容