查看: 3247|回复: 9

camere位置问题

[复制链接]

该用户从未签到

发表于 2010-3-8 05:54:18 | 显示全部楼层 |阅读模式
我想修改camera的位置与朝向。
我用view->getCamera()->setViewMatrix()不行,
用view->getCameraManipulator->setHomePosition()也没效果。
用view->getCameraManipulator->setByMatrix()可以看出效果。
这是为什么呢?

该用户从未签到

发表于 2010-3-8 08:41:38 | 显示全部楼层
你可以直接通过漫游器修改   漫游器中有_up,eye,_center三个变量  修改这三个变量就可以啦  如果是用系统自带的漫游器  你可以需要继承下   重写handle函数就可以了

该用户从未签到

发表于 2010-3-8 09:15:23 | 显示全部楼层
setHomePosition是设置初始位置,主相机的位置由漫游器CameraManipulator决定,因此如果您已经设置了漫游器对象,那么直接修改Camera的观察矩阵是无效的,使用setByMatrix没有问题。

该用户从未签到

 楼主| 发表于 2010-3-8 16:55:29 | 显示全部楼层
我已经设置了漫游器对象,是不是使用setByMatrix是唯一的修改方式?

该用户从未签到

 楼主| 发表于 2010-3-8 17:59:24 | 显示全部楼层
还有,我设置了漫游器对象之后,如果我不去主动修改camera的位置,我在程序中换模型,主相机的位置会发生变化吗?

该用户从未签到

发表于 2010-3-8 20:19:30 | 显示全部楼层
方法有很多,如:
void  setViewMatrixAsLookAt (const osg::Vec3d &eye, const osg::Vec3d &center, const osg::Vec3d &up)

void  setViewMatrix (const osg::Matrixf &matrix)  
如果你没有设置默认的漫游器,换模型是不会改变相机的位置~~~~~~

该用户从未签到

 楼主| 发表于 2010-3-8 20:24:06 | 显示全部楼层
我设置了默认漫游器,用setViewMatrixAsLookAt 和 setViewMatrix 都不管用

该用户从未签到

发表于 2010-3-9 08:23:22 | 显示全部楼层
您也可以使用自己定义的漫游器对象,并使用您自定义的方法。不过所有的漫游器都会重写setByMatrix并允许使用它来直接重设相机位置(即观察矩阵的逆矩阵)

我在程序中换模型,主相机的位置会发生变化吗
显而易见是不会的

该用户从未签到

发表于 2010-3-9 11:36:50 | 显示全部楼层
你设置的默认漫游器,你用setViewMatrixAsLookAt 和 setViewMatrix 修改相机位置时无效的,,,你可以简单的通过动态更新setViewMatrixAsLookAt 和 setViewMatrix 来设置相机位置,,不要设置默认漫游器~~~~~

该用户从未签到

 楼主| 发表于 2010-3-9 20:34:46 | 显示全部楼层
嗯,我知道了,谢谢两位了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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