查看: 1742|回复: 6

camera和漫游器的关系,搞不大清楚啊!!

[复制链接]

该用户从未签到

发表于 2012-9-22 00:40:03 | 显示全部楼层 |阅读模式
刚刚学习OSG,要被camera和漫游器搞昏了,好像没一本书讲的比较清楚,我有这么几个疑问:
1.关于camera,我看一般有这么几个用法,
camera->addChild( model );然后viewer.setSceneData( camera ); 或者
viewer.addSlave( camera指针);然后viewer.setSceneData( model );
问题:model放在camera下面model的位置会不会受到camera里矩阵的影响?

2.关于漫游器,一般是:
viewer.setCameraManipulator( new osgGA::TrackballManipulator ); 调用自带的trackball漫游器
问题:漫游器的设置可否和camera同时出现在代码里?还是用了漫游器就不用camera(只能二选一)了?如果用了两者可以同时出现,那camera不是可以设置多个么?那TrackballManipulator 实际操作的是哪一个?

请尽量回答完整我提出的问题,万分感谢你的指导。

该用户从未签到

发表于 2012-9-22 01:17:53 | 显示全部楼层
camera 除了有模型矩阵外还有投影矩阵以及窗口变换矩阵,而漫游器仅仅是用来改变camera的模型矩阵的。

该用户从未签到

 楼主| 发表于 2012-9-22 09:28:37 | 显示全部楼层
sky11811 发表于 2012-9-22 01:17
camera 除了有模型矩阵外还有投影矩阵以及窗口变换矩阵,而漫游器仅仅是用来改变camera的模型矩阵的。

我注意到漫游器没有专门指定绑定哪个camera,但一个viewer可以加多个camera,这个漫游器是修改的那个camera呢?

该用户从未签到

发表于 2012-9-22 11:44:05 | 显示全部楼层
默认是全部

该用户从未签到

 楼主| 发表于 2012-9-22 17:24:57 | 显示全部楼层
sky11811 发表于 2012-9-22 11:44
默认是全部

好的谢谢,经过我自己推理,我是这么认为的,麻烦看看我的理解对不对:
漫游器默认对应所有相机,设置漫游器以后,相机通过漫游器里面的setByMatrix之类的接口输入当前摄像机的矩阵,漫游器响应鼠标和键盘,每一帧修改这些矩阵,再通过接口getByMatrix向当前的相机输出矩阵,调整相机角度和位置。默认情况下,如果不指定漫游器,系统将使用trackball漫游器。如果设置了多个相机显示同一个的场景树的模型,键盘和鼠标的操作将会影响到每个相机显示的内容。

还有就是,我看相机是继承osg:transform的,如果把主场景放在相机节点下,相机矩阵的变化会不会带动主场景一并改变位置或角度(世界坐标系下)?

该用户从未签到

发表于 2012-9-22 21:48:23 | 显示全部楼层
我认为你有比较好的opengl基础,你的理解是对的。

该用户从未签到

发表于 2012-9-24 08:21:17 | 显示全部楼层
likethe265 发表于 2012-9-22 17:24
好的谢谢,经过我自己推理,我是这么认为的,麻烦看看我的理解对不对:
漫游器默认对应所有相机,设置漫 ...

漫游器 只是修改masterCamera的ViewMatrix,而其他的slaveCamera只是在UpdateTravel中在updateSlaveCamera()函数中根据主摄像机的Projection和Viewmatrix进行更新
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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