查看: 1956|回复: 3

如何将局部坐标系下的点坐标转换成全局坐标下的坐标

[复制链接]

该用户从未签到

发表于 2012-5-17 17:10:00 | 显示全部楼层 |阅读模式
我想把局部坐标系下的点转换成全局坐标系下的坐标,尝试了osg::Node::getWorldMatrices() , 用它获得的矩阵乘我的局部坐标,发现结果不对
请问大虾知道为什么吗?
或者应该怎么做件事?

该用户从未签到

发表于 2012-5-21 13:30:23 | 显示全部楼层
请告诉我为什么不对,您如何得到这个结论

该用户从未签到

 楼主| 发表于 2012-5-21 14:50:05 | 显示全部楼层
array 发表于 2012-5-21 13:30
请告诉我为什么不对,您如何得到这个结论

非常感谢array大神!
我画了一条线段,两个端点分别是(1 , 0 , 1)和(-10 , 0 -10) , 生成结点geode

我使用了matrixTransForm 将geode平移(1 , 0 , 0)
  1.         transform->postMult( osg::Matrix::translate(1 , 0 , 0 ));
  2.         transform->addChild(geode);
复制代码
然后获得变换矩阵 matrixList , 并遍历结点,用矩阵乘结点
  1.         osg::MatrixList matrixList= geode->getWorldMatrices();
  2.         osg::ref_ptr<osg::Vec3Array> vec3Array = (osg::Vec3Array*)geode->getDrawable(0)->asGeometry()->getVertexArray();

  3.         for( int i=0 ; i<vec3Array->size() ; i++ )
  4.         {
  5.                 osg::Vec3 vec = (*vec3Array)[i];
  6.                 osg::Vec3 vec2 = matrixList[0]*vec;
  7.                 printf( "before translation : %f , %f , %f\n" ,  vec[0] ,  vec[1],  vec[2] );
  8.                 printf( "after translation : %f , %f , %f\n" ,  vec2[0] ,  vec2[1],  vec2[2] );
  9.         }
复制代码
获得结果确实是 (1 ,0 , 1)变成了(0.5 , 0.5 , 0.5)   ,  (-10 , 0 , -10)变成(1.1111 , 0 , 1.1111)
请问array是我在矩阵使用上出了什么问题,为什么会出这个结果呢?

该用户从未签到

发表于 2012-5-22 09:40:18 | 显示全部楼层
  1. osg::Vec3 vec2 = matrixList[0]*vec;
复制代码
乘反了,谢谢。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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