查看: 1365|回复: 5

多像机问题

[复制链接]

该用户从未签到

发表于 2009-8-28 14:59:07 | 显示全部楼层 |阅读模式
请教大家一个问题,现在通过三个像机将屏幕分为左中右三个部分显示三个不同的场景模型。如何通过viewer获得鼠标所在窗口对应的相机啊?不通过osga获得,有没有办法啊?

该用户从未签到

 楼主| 发表于 2009-8-28 18:59:45 | 显示全部楼层
请问大家,我通过ea得到的坐标值为什么总是归一化后的啊?麻烦老大给我讲讲原因吧!

该用户从未签到

发表于 2009-8-28 20:58:44 | 显示全部楼层
你是通过getX还是getXnormalized获取的鼠标坐标,后者获得的是归一化后的坐标

该用户从未签到

 楼主| 发表于 2009-8-29 09:59:48 | 显示全部楼层
我是通过getX获得的。我想是不是与相机的顺序有关系啊?

该用户从未签到

发表于 2009-8-29 11:59:18 | 显示全部楼层
在多相机多视口的情况下,osg会自动对鼠标点坐标从当前视口映射到主相机视口,简单说就是通过屏幕坐标反算出空间坐标,然后再算出该空间坐标在主相机视口中的视口坐标,这个坐标值就是使用getX获得的值了
可以看一下osgViewer::Viewer::eventTraversal的代码:
  1. if (getCameraWithFocus())
  2.                     {
  3.                         osg::Viewport* viewport = getCameraWithFocus()->getViewport();
  4.                         osg::Matrix localCameraVPW = getCameraWithFocus()->getViewMatrix() * getCameraWithFocus()->getProjectionMatrix();
  5.                         if (viewport) localCameraVPW *= viewport->computeWindowMatrix();

  6.                         osg::Matrix matrix( osg::Matrix::inverse(localCameraVPW) * masterCameraVPW );

  7.                         osg::Vec3d new_coord = osg::Vec3d(x,y,0.0) * matrix;

  8.                         x = new_coord.x();
  9.                         y = new_coord.y();                                

  10.                         // osg::notify(osg::NOTICE)<<"pointer event new_coord.x()="<<new_coord.x()<<" new_coord.y()="<<new_coord.y()<<std::endl;

  11.                         event->setInputRange(eventState->getXmin(), eventState->getYmin(), eventState->getXmax(), eventState->getYmax());
  12.                         event->setX(x);
  13.                         event->setY(y);
  14.                         event->setMouseYOrientation(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);

  15.                     }
复制代码

该用户从未签到

 楼主| 发表于 2009-8-29 13:09:23 | 显示全部楼层
谢谢sohoman 了,好的我去看看吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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