查看: 1693|回复: 13

多视口问题

[复制链接]

该用户从未签到

发表于 2011-2-27 19:35:07 | 显示全部楼层 |阅读模式
这个问题以前问过,限于本人能力有限,没有实现,请高手帮帮忙。我想做同一个窗口中有两个独立的视图,标号为视图1(大视图),视图2(小视图),
分别看到两个场景,在一个视图1中可以漫游,也可以把视图2的场景调入视图1中漫游,不知应该怎样实现啊,
我想通过建立两个独立的相机来实现,怎么感觉有点困难啊,两个相机怎么是关联的啊,请高手指点,非常感谢

该用户从未签到

发表于 2011-2-27 23:48:32 | 显示全部楼层
您可以先学习一下osgcompositeviewer这个例子,这个没什么难度~~~~··

该用户从未签到

 楼主| 发表于 2011-2-28 09:38:20 | 显示全部楼层
如果我做一个按钮在最上面(也就是这个按钮不随场景的改变而改变),如果切换两个view,会不会影响按钮啊

该用户从未签到

发表于 2011-2-28 13:46:59 | 显示全部楼层
用compositeviewer没有问题,只要共享同一个按钮节点即可
通过独立的相机来调度也没有困难,可以在回调里实时调整相机的观察矩阵

该用户从未签到

 楼主| 发表于 2011-2-28 21:34:29 | 显示全部楼层
用compositeviewer做了两个view,大的view里在漫游,我试这通过调换两个view的大小和位置来实现切换,感觉不行啊,这个用该怎样解决啊,还有怎样实现点击别的按钮的时候,view停止当前的漫游,进入相应的界面啊!

该用户从未签到

发表于 2011-3-1 08:44:20 | 显示全部楼层
我不明白您具体的需求

该用户从未签到

 楼主| 发表于 2011-3-1 09:29:21 | 显示全部楼层
这是项目的要求,您看一看应该怎样做才好啊,以前可能表达的不是很清楚,让array 哥多费心了!(点击一下可看的更清楚)谢谢

该用户从未签到

 楼主| 发表于 2011-3-4 11:04:53 | 显示全部楼层
请问锐哥,我的按钮放在view1中,也就是上面的大视口,当我点击窗口切换时,可以向view1(大视口)中添加模型,向view2(小视口)中添加模型失败,(view1,view2,属于compositeviewer),是不是按钮只能响应所在视口的操作啊,您上面说的按钮共享能解决这个问题吗

该用户从未签到

发表于 2011-3-4 12:42:16 | 显示全部楼层
您的按钮是如何实现的,它是场景的一部分?还是GUI的一部分?

交换视图的场景是一件很简单的事情,也就是把viewer1的SceneData和viewer2的SceneData交换而已;没有什么响应不响应的问题

该用户从未签到

 楼主| 发表于 2011-3-4 16:26:06 | 显示全部楼层
锐哥您好!我的按钮是widget做的,通过一个camera加到view1上的,camera的渲染顺序排在最后,
osg::Node*ceep=getNode("ceep");//寻找节点 ceep
osg::Node*d2=getNode("d2");//寻找节点d2
view1->getSceneData()->asGroup()->removeChild(ceep);
view1->getSceneData()->asGroup()->addChild(d2);
view2->getSceneData()->asGroup()->removeChild(d2);
view2->getSceneData()->asGroup()->addChild(ceep);
如果把后两句去掉可以,view1可以变换场景,加上后两句就不行了,会报错

该用户从未签到

发表于 2011-3-4 17:12:38 | 显示全部楼层
这样应该没问题了,估计是您的代码其他地方存在问题

该用户从未签到

 楼主| 发表于 2011-3-4 18:23:50 | 显示全部楼层
哦,好的,我在查一下

该用户从未签到

 楼主| 发表于 2011-3-5 20:42:59 | 显示全部楼层
锐哥,上一个问题按照您的方法已经实现了,谢谢啊!还得麻烦您一下,
刚开始导入模型时需要确定视点的位置,我用view->getCamera()->setViewMatrixAsLookAt()来实现的,但是必须配用
while( !viewer->done() )  
{
viewer->frame();
}
才能行,这样的话模型就不动了,而且在视口中执行不了路径漫游了,
请问锐哥用什么方法设定模型导入时的视点,而且不影响其他操作啊?

该用户从未签到

发表于 2011-3-7 08:50:54 | 显示全部楼层
可以获得漫游器对象,然后直接设置CameraManipulator的setByInverseMatrix()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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