日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

osg多视景器实现投影墙

發(fā)布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 osg多视景器实现投影墙 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

下面的范例演示了4個視景器輔助相機(jī)拼接在一起,同時顯示一個場景的效果:

#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個參數(shù)是投影偏移矩陣,第3個參數(shù)是觀察偏移矩陣。

結(jié)果如下:

這四個相機(jī)共享主相機(jī)的投影矩陣和觀察矩陣以及同一個場景樹結(jié)構(gòu)。其中第一個addSlave表示第一個視景器,其中:第2個參數(shù)osg::Matrixd::translate(1.0, -1.0, 0.0),表示在原來主相機(jī)的投影矩陣的基礎(chǔ)上,x軸向右有1單位的偏移量,Y軸向下有1單位的偏移量,這樣保證了第一個窗口的部分奶牛模型位于第一個窗口的右下角,同理第2、3、4個視景器addSlave函數(shù)的第2個參數(shù)保證了部分奶牛模型位于窗體的左下角、右上角、左上角,這樣相當(dāng)于四個部分的奶牛模型拼接到了一起。注意:主相機(jī)投影是在每個子窗體中心的,也就是說第2個參數(shù)設(shè)置為osg::Matrixd::translate(0, 0, 0.0),則這四個窗體的部分奶牛模型都位于四個窗體的中心。

總結(jié)

以上是生活随笔為你收集整理的osg多视景器实现投影墙的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。