查看: 707|回复: 0

后视图与从相机问题~求助~

[复制链接]

该用户从未签到

发表于 2015-1-10 16:59:03 | 显示全部楼层 |阅读模式
看到书上讲从相机那块,我就照着书上做了一下。发现用从相机的时候,viewer->addSlave(leftcam.get(),osg::Matrix(),osg::Matrix::rotate(osg:egreesToRadians(180.0),0.0,1.0,0.0),true);这句话的结果本来是,显示主相机的后视图,结果运行之后发现,后视图没有显示,也就是从相机。忘懂的人能给我解惑一下,谢谢~


  1. #include <osgDB/ReadFile>
  2. #include <osgViewer/Viewer>
  3. #include <osgGA/TrackballManipulator>
  4. #include <iostream>

  5. void CreateCamera(osgViewer::Viewer *viewer)
  6. {

  7.         if(!viewer)
  8.         {
  9.                 return;
  10.         }

  11.         //创建窗口系统接口
  12.         osg::GraphicsContext::WindowingSystemInterface *wsi = osg::GraphicsContext::getWindowingSystemInterface();
  13.         if(!wsi)
  14.         {
  15.                 return;
  16.         }

  17.         //得到窗口分辨率
  18.         unsigned int width,height;
  19.         wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0),width,height);

  20.         //设置图形环境特性
  21.         osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
  22.         traits->x = 0;
  23.         traits->y = 0;
  24.         traits->width = width;
  25.         traits->height = height;
  26.         traits->windowDecoration = false; //是否支持窗口扩展的功能,win32中的style
  27.         traits->doubleBuffer =true;
  28.         traits->sharedContext = 0;

  29.         //创建图形环境
  30.         osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits);
  31.         if(!gc.valid())
  32.         {
  33.                 return;
  34.         }

  35.         //创建相机
  36.         osg::ref_ptr<osg::Camera> master = new osg::Camera;
  37.         master->setGraphicsContext(gc);
  38.         master->setViewport(width/2,height/2,width/2,height/2);
  39.         viewer->addSlave(master.get());

  40.         osg::ref_ptr<osg::Camera> leftcam = new osg::Camera;
  41.         leftcam->setGraphicsContext(gc);
  42.         leftcam->setViewport(0,0,width/2,height/2);
  43.         GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
  44.          //设置绘制缓冲,它在每帧绘制之前使用。注意:如果参数书GL_NONE,
  45.          //则在每帧绘制后自动加载合适的参数
  46.     leftcam->setDrawBuffer(buffer);
  47.          //为拷贝操作设置读缓冲
  48.     leftcam->setReadBuffer(buffer);
  49.         //leftcam->setRenderOrder(osg::Camera::POST_RENDER);
  50.         viewer->addSlave(leftcam.get(),osg::Matrix(),osg::Matrix::rotate(osg::DegreesToRadians(180.0),0.0,1.0,0.0),true);
  51.         osg::ref_ptr<osg::Node> scene =osgDB::readNodeFile("cow.osg");
  52.         viewer->setSceneData(scene);
  53.         return;
  54.        
  55. }

  56. int main()
  57. {
  58.         osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
  59.         CreateCamera(viewer);
  60.         viewer->run();
  61.         return 0;

  62. }



复制代码

运行结果[右上角为主,左下角为从相机]

运行结果[右上角为主,左下角为从相机]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表