查看: 2136|回复: 3

动态改变视口大小问题

[复制链接]

该用户从未签到

发表于 2012-8-1 15:27:53 | 显示全部楼层 |阅读模式
我想实现组合视图间的切换功能,就是一个视图显示,一个不显示,利用setviewport,有效果,但是场景变形,模型好像被拉伸了,而这样设置完后,只有resize一下窗口,才能恢复正常显示比例,请问这是为什么,如果解决?

该用户从未签到

发表于 2012-8-1 15:49:42 | 显示全部楼层
setviewport后从新调整一下摄像机的投影矩阵h/w

该用户从未签到

 楼主| 发表于 2012-8-1 16:04:58 | 显示全部楼层
谢谢,我试过,切换时似乎可以,但是远近比例似乎变了,再resize一下窗口时,场景模型好像被压扁似的,恢复不到最初的比例,我设置的比例跟起先是一样的,不知为何?

该用户从未签到

 楼主| 发表于 2012-8-1 16:12:12 | 显示全部楼层
        pView1->initialize(pGraphicsContext.get(), false);
        pView1->getContext()->getCamera()->setClearColor(osg::Vec4f(0.0f, 0.0f, 0.0f, 1.0f));
        pView1->getContext()->getCamera()->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height));
        pView1->getContext()->getViewer()->getCamera()->setProjectionMatrixAsPerspective(45.0, double(traits->width) / double(traits->height), 1.0, 1000.0);
        pView1->getContext()->getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES);
        pView1->getContext()->getCamera()->setNearFarRatio(0.00001f);
       
        pView2->initialize(pGraphicsContext.get(), false);
        pView2->getContext()->getCamera()->setClearColor(osg::Vec4f(1.0f, 1.0f, 1.0f, 1.0f));
        pView2->getContext()->getCamera()->setViewport(new osg::Viewport(traits->x, traits->y, 0, 0));
        pView2->getContext()->getViewer()->getCamera()->setProjectionMatrixAsPerspective(45.0, double(traits->width) / double(traits->height), 1.0, 1000.0);
        pView2->getContext()->getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES);
        pView2->getContext()->getCamera()->setNearFarRatio(0.00001f);
       
                if(pView1)
                {
                        pView1->getContext()->getCamera()->setViewport(0, 0, 0, 0);
                }

                if(pView2)
                {
                        pView2->getContext()->getCamera()->setViewport(0, 0, width, height);
                        pView2->getContext()->getCamera()->setProjectionMatrix(osg::Matrix::perspective(45.0, double(width) / double(height), 1.0, 1000.0));
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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