查看: 1632|回复: 4

osgprerendercubemap的例子疑惑!

[复制链接]

该用户从未签到

发表于 2010-4-28 20:52:22 | 显示全部楼层 |阅读模式
osg自带的osgprerendercubemap例子:

1、为啥在回调中对六个面设置六个相机的观察矩阵设置啊,不是固定的么?

2、还有纹理的TexMatCullCallback里,为啥要用下面代码对纹理做逆旋转?
_texmat->setMatrix(osg::Matrix::rotate(quat.inverse()));

该用户从未签到

发表于 2010-4-29 08:51:15 | 显示全部楼层
1、为啥在回调中对六个面设置六个相机的观察矩阵设置啊,不是固定的么
看一下实现的效果,您就知道它们是时刻变化的

2、还有纹理的TexMatCullCallback里,为啥要用下面代码对纹理做逆旋转
简单说来就是为了不断更新纹理坐标矩阵。具体的原理您可以自行列公式计算一下

该用户从未签到

 楼主| 发表于 2010-4-29 10:36:27 | 显示全部楼层
这个例子不是6个相机渲染6个面到cubemap,然后中间反射球根据自动生成反射纹理坐标,检索cubemap贴纹理么。我理解的对么?

1。 下面的position是固定的吧,也就是localOffset固定的。就是这个worldToLocal随主相机变化而变化,从相机是绝对坐标系,就朝着6个方向固定渲染不就好了,跟主相机有啥关系?

osg::Matrixd worldToLocal = osg::computeWorldToLocal(_reflectorNodePath);
osg::BoundingSphere bs = _reflectorNodePath.back()->getBound();
osg::Vec3 position = bs.center();

osg::Matrix localOffset;
localOffset.makeLookAt(position,position+id[i].first,id[i].second);
osg::Matrix viewMatrix = worldToLocal*localOffset;

_Cameras[i]->setViewMatrix(viewMatrix);

2。我知道是在更新纹理坐标矩阵,而且是做ModelViewMatrix的旋转逆旋转,我意思是问做这个旋转的意义是什么,就是干什么用的?

该用户从未签到

发表于 2010-4-29 11:22:50 | 显示全部楼层
从相机是绝对坐标系,就朝着6个方向固定渲染不就好了,跟主相机有啥关系
仅仅针对主球体不动的情况而言,您的说法也许没错;但是如果主球体是运动着的,那么您的方法就会产生错误。学习像例子的作者那样去思考,这会有助于您理解和发散思维

我意思是问做这个旋转的意义是什么,就是干什么用的
您可以看一下cubemap贴图的纹理设置方法,然后自己列公式来判断这里的意义。我个人不想去深究代码中某个算法,如果我目前对它没有兴趣的话~~

该用户从未签到

 楼主| 发表于 2010-4-29 12:17:20 | 显示全部楼层
谢谢啊,第一个问题算是理解了~~

第二个依然晕菜~~~代码跟着跟着就晕了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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