查看: 2088|回复: 2

怎样设置投影矩阵

[复制链接]

该用户从未签到

发表于 2014-11-13 17:35:01 | 显示全部楼层 |阅读模式
//得到cameraMaster(主相机)
        osg::ref_ptr<osg::Camera> cameraMaster = viewer->getCamera();
        //设置图形环境
        cameraMaster->setGraphicsContext(gc.get());

        //根据分辨率来确定合适的投影来保证显示的图形不变形
        double fovy, aspectRatio, zNear, zFar;
        cameraMaster->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);
        double newAspectRatio = double(traits->width) / double(traits->height);
        double aspectRatioChange = newAspectRatio / aspectRatio;
        if (aspectRatioChange != 1.0)
        {
                cameraMaster->getProjectionMatrix() *= osg::Matrix::scale(1.0/aspectRatioChange,1.0,1.0);
        }

        //设置视口
        cameraMaster->setViewport(new osg::Viewport(0,0, width, height));
        GLenum bufferMaster = traits->doubleBuffer ? GL_BACK : GL_FRONT;
        //设置缓冲区
        cameraMaster->setDrawBuffer(bufferMaster);
        cameraMaster->setReadBuffer(bufferMaster);

        //创建从属相机
        osg::ref_ptr<osg::Camera> cameraClient = new osg::Camera();
        cameraClient->setGraphicsContext(gc.get());
        cameraClient->setViewport(new osg::Viewport(0,0, 400, 400));
        GLenum bufferClient = traits->doubleBuffer ? GL_BACK : GL_FRONT;
        cameraClient->setDrawBuffer(bufferClient);
        cameraClient->setReadBuffer(bufferClient);

        //添加从属相机
        viewer->addSlave(cameraClient,osg::Matrix::scale(aspectRatio,1.0,1.0),osg::Matrix()) ;

该用户从未签到

 楼主| 发表于 2014-11-13 18:05:07 | 显示全部楼层
为什么主摄像机设置投影矩阵,从摄像机不用设置投影矩阵呢
osg编程指南有一段话:
如果View仅仅有一个主相机,则该主相机用来负责控制和渲染视图场景。如果包含从属相机,则主相机用来负责控制管理视图,则从相机用于渲染场景。
管理视图和渲染场景分别是做什么的?体现在哪部分?

该用户从未签到

 楼主| 发表于 2014-11-13 17:39:17 | 显示全部楼层
动鼠标,2个视图跟着动?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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