查看: 1855|回复: 11

怎么样改变模型文件的坐标

[复制链接]

该用户从未签到

发表于 2010-5-27 10:28:52 | 显示全部楼层 |阅读模式
我想把一个已有的IVE文件的坐标改变,目的是把它放到一个地方,但是不受他原有坐标的影响。PositionAttitudeTransform和MatrixTransform好象只是把坐标系改变,还是受到模型本身原有坐标的影响。也就是除非模型本身是(0,0,0),否则单纯使用PositionAttitudeTransform和MatrixTransform还是不能把它放到我想要的位置上。osg是否有改写坐标的操作呢,这个操作最好和原有坐标完全无关。

该用户从未签到

发表于 2010-5-27 13:31:10 | 显示全部楼层
我不明白您的意思,PositionAttitudeTransform和MatrixTransform都可以满足您的要求

该用户从未签到

 楼主| 发表于 2010-5-27 13:47:53 | 显示全部楼层
我的意思是因为当初建模的时候用的是任意坐标系。现在我要把他放到生成的地球上去。如果模型坐标为(0,0,0),那么用convertLatLongHeightToXYZ计算出坐标后,我要放到得到的坐标就可以直接移动。但是因为模型本身坐标的关系,我要多操作几步,每个模型多转换一次感觉开销也不小。我的意思是可不可以放弃模型原有坐标,因为目标坐标我是通过经纬度得到的,跟原先坐标没关系,直接写目标坐标覆盖原由坐标。OSG是否有这样的操作。

该用户从未签到

发表于 2010-5-27 17:05:58 | 显示全部楼层
“直接写目标坐标覆盖原由坐标”,OSG中的坐标变换都是这样得到的

该用户从未签到

 楼主| 发表于 2010-5-28 08:58:04 | 显示全部楼层
osg::Matrixd matrix;
        matrix.makeTranslate(osg::Vec3d(x,x,x));        osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
        mt->setMatrix(matrix);
        mt->addChild(node.get());
假使node的原坐标是osg::Vec3d(y,y,y),最后求得mt的center是osg::Vec3d(x+y,x+y,x+y),而不是覆盖原来坐标直接得到osg::Vec3d(x,x,x),而此时求node的坐标仍旧是osg::Vec3d(y,y,y)。

该用户从未签到

 楼主| 发表于 2010-5-28 10:59:49 | 显示全部楼层
我刚又翻了下资料,可能是我没把局部坐标系变换到世界坐标系

该用户从未签到

 楼主| 发表于 2010-5-28 11:36:04 | 显示全部楼层
新的问题出现了,要怎么把局部坐标系的某个建筑放到世界坐标系上呢?

该用户从未签到

发表于 2010-5-28 13:10:59 | 显示全部楼层
如果您需要局部坐标系向世界坐标系的转换矩阵,可以使用下面的代码:
  1. matrix = osg::computeLocalToWorld(node->getParentalNodePaths()[0])
复制代码
然后vec * matrix就是局部坐标点vec的世界坐标

该用户从未签到

 楼主| 发表于 2010-5-28 15:44:25 | 显示全部楼层
呃,我是在节点树建立之前要求出模型的放置位置,并不是求坐标。
不过我通过把模型的center求出来,然后
pat->setPivotPoint(cener);
pat->setpositiom(xxx);这种方法放对了位置
不过getEllipsoidModel()->computeLocalUpVector()求出来的方向向量又遇到了旋转的之后绕原点坐标原点旋转而不是绕模型中心旋转
请问怎么设置makeRotate()旋转的中心点呢。

该用户从未签到

 楼主| 发表于 2010-5-28 15:46:30 | 显示全部楼层
我在想为什么不能把PositionAttitudeTransform和MatrixTransform合成一个类呢,搞得我现在纠结死=。=

该用户从未签到

发表于 2013-1-17 21:06:46 | 显示全部楼层
直接写目标坐标覆盖原由坐标!!!有学习了一个知识点啊!!!

该用户从未签到

发表于 2013-1-19 10:21:46 | 显示全部楼层
目测以后肯定会遇到此问题。。记下了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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