查看: 1693|回复: 3

请教关于节点局部坐标的问题

[复制链接]

该用户从未签到

发表于 2009-12-6 10:42:35 | 显示全部楼层 |阅读模式
我使用的OSG版本是2.8.2,我有一个IVE文件,里面有一个OSG::GROUP根节点,在这个根节点下有2个OSG::GROUP子节点,分别是地面和建筑,地面很大,半径有100000多,建筑很小,半径只有几百,在初始化时我使用了setNearFarRatio(0.00001),漫游器使用的是osgGA::TrackballManipulator,我想对建筑节点进行定位,首先要获取这个节点的包围球,但是发现一个问题,我在程序里使用了鼠标右键对场景进行放缩操作后,得到的包围球坐标会随着放缩程度变化,我想可能得到的是局部坐标,还需要一个转换矩阵,然后我查到如下的方法:调用建筑节点的OSG::NODE::getParentalNodePaths得到osg::NodePath,然后用OSG::computeLocalToWorld得到转换矩阵,我使用了这个方法,但是发现得到的转换矩阵是一个单位化的标准矩阵,也就是说,我开始得到的包围球坐标就是世界坐标?为什么包围球的坐标会随着漫游器的放缩操作而变化?漫游器只是改变VIEWMATRIX而已,怎么会影响节点的局部坐标呢?哪位高手能为我解解惑啊

该用户从未签到

发表于 2009-12-6 12:08:28 | 显示全部楼层
不太清楚你这里的缩放??如果你使用的是操作器,那么改变的只是视点位置~~~如果你缩放了场景数据,包围盒也肯定会改变??????

PS:楼主好像是dota爱好者啊,哈哈,,不过,地图有些老了,换6.64吧~~~

该用户从未签到

 楼主| 发表于 2009-12-6 12:32:33 | 显示全部楼层
我使用的漫游器是OSG自带的OSGGA::TrackballManipulator,我所说的缩放实际上就是:按住鼠标右键不动,然后上/下移动鼠标这个操作,这个操作的效果也相当于缩放了,我也看了TrackballManipulator的源码,这个操作也只是改变了视点位置而已,应该不会影响包围盒的坐标吧?我是直接调用osg:node:getbound()得到节点的包围盒,是否这个包围盒的中心和半径和viewmatrix有关?我并没有自行缩放场景数据(因为我还不知道怎么缩放场景数据...)

看来DOTA还真是流行啊...呵呵

该用户从未签到

发表于 2009-12-7 05:57:24 | 显示全部楼层
getBound得到的未必正确,,你使用computeBound()得到实时的包围盒或者调用osg::ComputeBoundsVisitor 访问器来遍历得到包围盒~~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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