osg多视景器实现投影墙
生活随笔
收集整理的這篇文章主要介紹了
osg多视景器实现投影墙
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面的范例演示了4個視景器輔助相機拼接在一起,同時顯示一個場景的效果:
#include <osgViewer/Viewer> #include <osg/Node> #include <osg/Geometry> #include <osg/Geode> #include <osg/Group> #include <osg/AutoTransform> #include <osg/ProxyNode> #include <osgDB/ReadFile> #include <osgDB/WriteFile> #include <osgText/Text> #include <osgUtil/Optimizer> #include<osg/Camera> #include<osgViewer/Viewer> #include <iostream>osg::Camera* createCamera(int x, int y, int w, int h) {osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;traits->windowDecoration = false;traits->x = x;traits->y = y;traits->width = w;traits->height = h;osg::DisplaySettings* ds = osg::DisplaySettings::instance();traits->alpha = ds->getMinimumNumAlphaBits();traits->stencil = ds->getMinimumNumStencilBits();traits->sampleBuffers = ds->getMultiSamples();traits->samples = ds->getNumMultiSamples();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, w, h));return camera.release(); } void main() {osg::Node*pModel = osgDB::readNodeFile("glider.osg");osgViewer::Viewer viewer;viewer.addSlave(createCamera(100, 100, 400, 300), osg::Matrixd::translate(1.0, -1.0, 0.0), osg::Matrixd());viewer.addSlave(createCamera(505, 100, 400, 300), osg::Matrixd::translate(-1.0, -1.0, 0.0), osg::Matrixd());viewer.addSlave(createCamera(100, 405, 400, 300), osg::Matrixd::translate(1.0, 1.0, 0.0), osg::Matrixd());viewer.addSlave(createCamera(505, 405, 400, 300), osg::Matrixd::translate(-1.0, 1.0, 0.0), osg::Matrixd());viewer.setSceneData(pModel);viewer.run(); }說明:addSlave的第2個參數是投影偏移矩陣,第3個參數是觀察偏移矩陣。
結果如下:
這四個相機共享主相機的投影矩陣和觀察矩陣以及同一個場景樹結構。其中第一個addSlave表示第一個視景器,其中:第2個參數osg::Matrixd::translate(1.0, -1.0, 0.0),表示在原來主相機的投影矩陣的基礎上,x軸向右有1單位的偏移量,Y軸向下有1單位的偏移量,這樣保證了第一個窗口的部分奶牛模型位于第一個窗口的右下角,同理第2、3、4個視景器addSlave函數的第2個參數保證了部分奶牛模型位于窗體的左下角、右上角、左上角,這樣相當于四個部分的奶牛模型拼接到了一起。注意:主相機投影是在每個子窗體中心的,也就是說第2個參數設置為osg::Matrixd::translate(0, 0, 0.0),則這四個窗體的部分奶牛模型都位于四個窗體的中心。
總結
以上是生活随笔為你收集整理的osg多视景器实现投影墙的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: B站去年给Up主分了91亿元!But:公
- 下一篇: 逆水寒手游公测定档6月30日 :要让MM