查看: 3729|回复: 7

请教一个关于setViewMatrixAsLookAt函数的问题

[复制链接]

该用户从未签到

发表于 2009-5-18 22:01:06 | 显示全部楼层 |阅读模式
如果先调用mViewer->setCameraManipulator(NULL);然后再调用mViewer->getCamera()->setViewMatrixAsLookAt(),此时的setViewMatrixAsLookAt有效;如果mViewer里面存在一个照相机控制器,然后调用mViewer->getCamera()->setViewMatrixAsLookAt(),此时的setViewMatrixAsLookAt函数无效,即不能够把照相机定位到想要的位置,场景无任何变化。
请问哪问朋友遇到后面这种情况没有,可能出现的问题在那里,应该如何,才能使setViewMatrixAsLookAt该函数有效呢?先谢谢各位

该用户从未签到

发表于 2009-5-19 00:07:23 | 显示全部楼层
有了操控器就不能随便设模型视点矩阵了,控制器会冲掉你设的矩阵,如果一定要想改的话,可以看下控制器的getInverseMatrix()怎么算的矩阵,比如说TrackballManipulator操控器就是用_center,_rotation,-_distance来计算的矩阵,你可以尝试改这几个变量来设置矩阵~~~

该用户从未签到

 楼主| 发表于 2009-5-19 09:14:41 | 显示全部楼层
哦,原来是这样啊,谢谢哈

我还想问一个问题。如果场景中已经存在一个照相机控制器,比如TrackballManipulator,我想把场景移动到一个特定的位置,除了setViewMatrixAsLookAt(其实这个函数这这种情况下没有作用)之外,还有什么其他的办法吗?

该用户从未签到

发表于 2009-5-19 09:18:34 | 显示全部楼层
最好的办法是自己派生一个新的MatrixManipulator,或者不使用漫游器

该用户从未签到

 楼主| 发表于 2009-5-19 09:59:48 | 显示全部楼层
不使用场景漫游器(mViewer->setCameraManipulator(NULL)),确实可以把场景移动特定的位置,但之后鼠标就不能控制场景了。如果此时再添加一个照相机控制器,场景就会回到照相机控制器的默认场景,出现场景的跳变,还是达不到想把场景移动到一个特定位置的目的。

该用户从未签到

 楼主| 发表于 2009-5-19 10:07:09 | 显示全部楼层
我在程序里面通过设置照相机默认位置的办法,可以把场景移动到特定的位置,即通过如下的语句:

mViewer->getCameraManipulator()->setHomePosition(...);
mViewer->home();

但是之后,鼠标在控制场景时,操作特别不灵活,甚至出现右键和左右键同时操作时,场景没有任何反应,不知道有哪位朋友碰到过这种情况没有,该如何解决。

看来要在osg里面把场景移动到一个特定的位置,这个小小的功能还真是麻烦了

该用户从未签到

发表于 2009-5-19 12:29:34 | 显示全部楼层
最好的办法是自己派生一个新的MatrixManipulator——这个办法您不愿意去尝试吗?
不要拘泥于OSG现有的功能,OSG的强大在于它的可扩展性;比如我个人的习惯是基本不使用UpdateCallback回调,而是根据需要的功能重写traverse()函数并派生新的节点

该用户从未签到

 楼主| 发表于 2009-5-19 13:06:38 | 显示全部楼层
确实是,您的这个建议很好,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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