一、OSGBLab是什麼?
OSGBLab全稱OpenSceneGraph Builder Lab,是基於OpenSceneGraph開源渲染引擎的GUI程序開發環境。它提供了一整套的工具,在Windows、Linux、macOS等平台下,可以進行可視化的場景編輯、材質紋理編輯、模型導入、場景渲染、場景導出等一系列的快速開發方案。
OSGBLab的主要特點是支持多格式模型導入、多格式材質紋理編輯,同時支持多種渲染器如: OSG中最為常用的 BasicRenderer、SSAO、PBR、HQAA、CascadeShadowMap等渲染效果,並且可以和其他開發工具或庫(如osgQt、Qt等)集成應用,提高開發效率。
下面是一個OSG場景的快速渲染展示:
osgViewer::Viewer viewer; osg::ref_ptr loadedModel = osgDB::readNodeFile("path/to/model.osgt"); viewer.setSceneData(loadedModel); return viewer.run();
二、OSGBLab的主要功能及應用場景
1. 場景編輯
OSGBLab提供了一整套的場景編輯工具,方便用戶快速構建場景並在GUI畫面上進行可視化的編輯。用戶可以添加、刪除、移動、選中、對象等等動作,同時支持場景區域的選擇、添加材質、紋理等操作。
osg::ref_ptr rootNode = new osg::Group(); osg::ref_ptr boxGeode = new osg::Geode(); osg::ref_ptr boxDrawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(1.0f, 1.0f, 1.0f), 2.0f)); boxGeode->addDrawable(boxDrawable); rootNode->addChild(boxGeode);
2. 模型導入
OSGBLab支持多種格式的模型導入,包括但不限於.obj、.fbx、.3ds、.blend等格式。用戶可以通過DRAG & DROP的方式快速的將模型導入到OSGBLab的場景渲染列表中。
osg::ref_ptr loadedModel = osgDB::readNodeFile("path/to/model.osgt"); osg::ref_ptr rootNode = new osg::Group(); rootNode->addChild(loadedModel);
3. 材質編輯
OSGBLab支持多格式材質紋理編輯,支持多種貼圖模式(一般貼圖、光澤貼圖、法線貼圖、反射貼圖等),支持紋理類型和紋理坐標的快速編輯,並且支持貼圖的保存和導出。
osg::ref_ptr material = new osg::Material(); material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(0.5f, 0.5f, 0.5f, 1.0f)); material->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4(0.5f, 0.5f, 0.5f, 1.0f)); material->setShininess(osg::Material::FRONT_AND_BACK, 64.0f); osg::ref_ptr stateSet = new osg::StateSet(); stateSet->setAttribute(material.get()); stateSet->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readImageFile("path/to/texture.png")), osg::StateAttribute::ON); osg::ref_ptr boxGeode = new osg::Geode(); osg::ref_ptr boxDrawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(1.0f, 1.0f, 1.0f), 2.0f)); boxGeode->addDrawable(boxDrawable); boxGeode->setStateSet(stateSet);
三、OSGBLab與其他開發工具的集成應用
1. osgQt
osgQt是一個開源的Qt庫,主要解決Qt與OpenSceneGraph集成問題,屬於osgwidget的衍生項目。OSGBLab與osgQt的整合使用可以快速地完成對場景的UI界面開發,優化場景的布局以及兼容多種操作系統。
osg::ref_ptr graphicsWindow = new osgQt::GraphicsWindowQt(contextWidget); osgViewer::Viewer viewer; viewer.getCamera()->setClearColor(osg::Vec4(0.9f, 0.9f, 0.9f, 1.0f)); viewer.getCamera()->setGraphicsContext(graphicsWindow); viewer.setSceneData(scene); viewer.getCamera()->setViewport(new osg::Viewport(0, 0, contextWidget->width(), contextWidget->height()));
2. Qt Design Studio
Qt Design Studio是一個由Qt官方推出的基於Qt開發的可視化設計工具,提供了一站式的解決方案。通過與OSGBLab的整合使用,用戶可以使用Qt Design Studio快速地設計場景UI,並且可以在OSGBLab的場景渲染器中實時預覽。
osg::ref_ptr graphicsWindow = new osgQt::GraphicsWindowQt(contextWidget); QQuickWidget *quickWidget = new QQuickWidget(); quickWidget->setSource(QUrl(QStringLiteral("qrc:/main.qml"))); QObject *qmlObject = quickWidget->rootObject(); qmlObject->setProperty("osgScene", QVariant::fromValue(viewer.getSceneData())));
四、結語
OSGBLab提供的一系列工具和應用場景可以幫助用戶快速完成開發任務,有效提高開發效率,同時它的開源和免費的特點也使得它成為了一款備受開發者青睞的開發工具。
原創文章,作者:EIOPH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/333942.html