查看: 1143|回复: 5

多通道环幕投影融合带图像偏差

[复制链接]

该用户从未签到

发表于 2016-5-27 18:00:20 | 显示全部楼层 |阅读模式
360°环幕,12台投影仪,6台计算机,一台输出两通道,一台的电脑水平视角60多度,通道采用对称视椎体+旋转相机,硬融合,但是在融合带的地方图像会打折,而且一个通道内的图像会变形(相机水平视角过大?)。各位大侠有没有遇见过。投影角度过大的问题怎么处理?

融合带的地方打折:  

javascript:;

码头是直的  但是在环幕上分成两段弯曲,融合带的地方打折

硬融网格:
javascript:;



各位大侠帮看看

融合带图像打折

融合带图像打折
50055C9D7295F859F8058EF9AF619100.jpg

该用户从未签到

发表于 2016-5-29 19:26:52 | 显示全部楼层
看图上,硬件融合没问题,应该是软件的投影矩阵算错了。两个屏幕图像是用的两个camera还是一个?

该用户从未签到

 楼主| 发表于 2016-5-30 08:59:14 | 显示全部楼层
smash 发表于 2016-5-29 19:26
看图上,硬件融合没问题,应该是软件的投影矩阵算错了。两个屏幕图像是用的两个camera还是一个?

谢谢大侠关注。

融合带两边各用一个独立的相机,旋转相机矩阵,对称透视投影。

这是设置透视投影的地方:

                        double        aspectRatio = _screenWidth / (float)_screenHeight;
                        double        fovy = atan(tan(osg:egreesToRadians(_cameraFov) * 0.5) / aspectRatio) * 2.0;
                        camera->setProjectionMatrixAsPerspective(osg::RadiansToDegrees(fovy), aspectRatio, 1.0, 100000);

在相机操作器中计算相机的矩阵:

                                osg:uat childRot = osg::Quat((delRot.x()), osg::Vec3d(1.0, 0.0, 0.0),
                                        (delRot.y()), osg::Vec3d(0.0, 1.0, 0.0),
                                        (delRot.z()), osg::Vec3d(0.0, 0.0, 1.0));

                                osg::Matrixd mat = osg::Matrixd::rotate(chanlRadians, osg::Vec3d(0.0f,0.0f,1.0f)) * osg::Matrixd::rotate(childRot) * osg::Matrixd::rotate(parentRot);
                                mat = mat * osg::Matrixd::translate( delPos );
                                _matrix = osg::Matrixd::rotate(osg:I_2,osg::Vec3d(1,0,0)) * mat;

其中 chanlRadians是当前的通道旋转角度  childRot是当前视点的旋转  parentRot是船体的旋转 delPos是船体的世界坐标
以上数据打印在屏幕上是一样的。

麻烦您帮看看,纠结啊!!!

该用户从未签到

发表于 2016-5-30 09:36:37 | 显示全部楼层
本帖最后由 smash 于 2016-5-30 09:39 编辑
spritezero 发表于 2016-5-30 08:59
谢谢大侠关注。

融合带两边各用一个独立的相机,旋转相机矩阵,对称透视投影。


要能两边图像完美拼合,两边camera需要有相同的ViewMatrix,只是ProjectMatrix不一样。不能通过fov和aspectratio来生成ProjectMatrix,通过top bottom left right来生成。左边相机的right=右边相机的left,top bottom相同。这样就能拼合起来了。如果你用的是软融合,还要考虑融合带。左边的right要略大于右边的left,差一个融合带的距离。

该用户从未签到

 楼主| 发表于 2016-5-30 10:12:49 | 显示全部楼层
smash 发表于 2016-5-30 09:36
要能两边图像完美拼合,两边camera需要有相同的ViewMatrix,只是ProjectMatrix不一样。不能通过fov和as ...

我原来有考虑过使用不对称视锥。
考虑使用对称视锥,主要是方便,在fov角度小时偏差不是很明显,通过软融合把融合带消掉后,偏差基本上看不出来。
第一次做硬融合,fov角度一大,问题就暴露出来了。

谢谢您的回复,我用不对称视锥试试。

该用户从未签到

发表于 2016-5-31 12:18:44 | 显示全部楼层
spritezero 发表于 2016-5-30 10:12
我原来有考虑过使用不对称视锥。
考虑使用对称视锥,主要是方便,在fov角度小时偏差不是很明显,通过软 ...

不对称视锥边缘的变形肯定大。如果用对称视锥,两个视点不要平行,有一个小的角度差,会好一些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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