查看: 2188|回复: 6

怎么求某个节点的世界坐标?

[复制链接]

该用户从未签到

发表于 2012-6-28 14:46:26 | 显示全部楼层 |阅读模式
class getWorldCoordOfNodeVisitor : public osg::NodeVisitor
{
public:
        getWorldCoordOfNodeVisitor():
          osg::NodeVisitor(NodeVisitor::TRAVERSE_PARENTS), done(false)
          {
                  wcMatrix= new osg::Matrixd();
          }
          virtual void apply(osg::Node &node)
          {
                  if (!done)
                  {
                          if ( 0 == node.getNumParents() ) //到达根节点,此时节点路径也已记录完整
                          {
                                  wcMatrix->set( osg::computeLocalToWorld(this->getNodePath()) );
                                  done = true;
                          }
                          traverse(node);
                  }
          }
          osg::Matrixd* giveUpDaMat()
          {
                  return wcMatrix;
          }
private:
        bool done;
        osg::Matrix* wcMatrix;
};


osg::Matrixd* getWorldCoords( osg::Node* node)
{
        getWorldCoordOfNodeVisitor* ncv = new getWorldCoordOfNodeVisitor();
        if (node && ncv)
        {
                node->accept(*ncv);
                return ncv->giveUpDaMat();
        }
        else
        {
                return NULL;
        }
}

在这个方法基础上应该怎么修改?

该用户从未签到

 楼主| 发表于 2012-6-28 14:47:47 | 显示全部楼层
有没有类似的例子 参考一下

该用户从未签到

发表于 2012-6-29 16:35:03 | 显示全部楼层
既然都知道Node的指针了,那还用这个visitor干嘛,直接getparentpath[0],然后computeLocaltoworld()

该用户从未签到

发表于 2012-6-29 22:34:58 | 显示全部楼层
什么意思 这个不就是求世界坐标的代码么。。。 你也可以写成operator()更新回调的形式~这样每一帧都计算节点的世界坐标

该用户从未签到

发表于 2012-7-1 23:40:51 | 显示全部楼层
osg::Matrixd getWorldCoords( osg::Node* node)
{
      osg::NodePath& nodepath = node->getNodePath();
      osg::Matrixd mat = osg::ComputeLocalToWorld(nodepath);
      return mat;
}

该用户从未签到

 楼主| 发表于 2012-7-2 11:28:36 | 显示全部楼层
哈哈 已经搞定了

该用户从未签到

发表于 2015-5-25 14:43:00 | 显示全部楼层

怎么搞定的,提了问题就把解决方法放上来嘛,么么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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