查看: 2116|回复: 8

坐标问题

[复制链接]

该用户从未签到

发表于 2009-6-10 00:49:06 | 显示全部楼层 |阅读模式
我使用下面的语句得到position的值并输出。
viewer ->getCamera() ->getViewMatrixAsLookAt(position, center, up) ;
或者getInverseMatrix().getLookAt(_position,center,_up);得到的position的值都是一样的。
但如图中所示,得到的坐标明显是错误的。不知道是什么原因,望各位高手指教,谢谢!
2.JPG

该用户从未签到

发表于 2009-6-10 01:11:21 | 显示全部楼层
viewer ->getCamera() ->getViewMatrixAsLookAt(position, center, up)

这样做是没有问题的,,可能是你的代码放的地方不对,,,或者处于初始化状态~~~~~~~~~~这个应该不属于坐标系的问题~~~~~~~

该用户从未签到

 楼主| 发表于 2009-6-10 09:54:11 | 显示全部楼层
谢谢您的回复。我是在OSGMFC的框架下写的代码。
  1. void cOSG::InitOSG(std::string modelname)
  2. {
  3.     // Store the name of the model to load
  4.     m_ModelName = modelname;

  5.     // Init different parts of OSG
  6.     InitManipulators();
  7.     InitSceneGraph();
  8.     InitCameraConfig();
  9. }
复制代码
然后自己写一个PH类继承自GUIEventHandler,
  1. bool CPH::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
  2. {
  3.         switch(ea.getEventType())
  4.         {
  5.         case(osgGA::GUIEventAdapter::FRAME):
  6.                 {
  7.                         osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
  8.                         viewer ->getCamera() ->getViewMatrixAsLookAt(position, center, up) ;
  9.                 }   
  10.         default:
  11.                 return false;
  12.         }

  13. }
复制代码
并在InitCameraConfig()中,添加代码:mViewer ->addEventHandler(ph);
而且如果我把数据换成是平面的数据,得到的position的值是没有错的。

[ 本帖最后由 vincent 于 2009-6-10 10:13 编辑 ]

该用户从未签到

发表于 2009-6-10 10:58:24 | 显示全部楼层
您得到的position是眼睛的位置,这是您所需的吗?您如何知道它肯定是错误的呢

该用户从未签到

 楼主| 发表于 2009-6-10 11:58:46 | 显示全部楼层
我要的就是视点的位置。
把视点拉近,贴到地面时得到的值:(-2177942.8,4388799.0,4069965.3),这个是北京地区。
这个值不对吧。

该用户从未签到

发表于 2009-6-10 12:24:45 | 显示全部楼层
这个可能源于你的坐标系的设置问题,,,并不是得到的视点位置不正确~~~~或许你拾取一下可能更容易判断~~~~~~

该用户从未签到

 楼主| 发表于 2009-6-10 15:22:42 | 显示全部楼层
pick得到的值也类似上面那样。
我的原始数据是WGS84的,在arcmap里面可以正确显示。
您所指的坐标系设置问题是指什么?可以详细说下吗?多谢了!

该用户从未签到

发表于 2009-6-10 18:56:33 | 显示全部楼层
那你拾取的应该是你的物体坐标系下的坐标,,应该这么说,,你要把你的球体就是坐标系的坐标,,,转换到局部坐标系下试试~,,,,应该不会有错的~~~~~~

该用户从未签到

发表于 2009-6-11 10:34:31 | 显示全部楼层
以osg中EllipsoidModel定义的地球坐标系计算,您得到的北京附近的位置坐标是正确的!
该坐标系原点在地球球心,X轴指向东经0度赤道处,Y轴指向东经90度赤道处,Z轴指向北极

您可以在场景中原点处放个放大的坐标轴(比如axes.osg),坐标系的情况一目了然

[ 本帖最后由 indif 于 2009-6-11 10:36 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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