【问题标题】:OSG: Get transform matrix from a nodeOSG:从节点获取变换矩阵
【发布时间】:2013-01-15 08:24:15
【问题描述】:

首先我要为我的英语道歉。

我正在开发一个应用程序,我们必须在每个时刻都知道每个节点的属性(位置、旋转...),所以我考虑从场景图中获取每个节点的变换矩阵。

我的问题是我不知道该怎么做。例如,如果我有类似的东西:

osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale");

我想从名为 root 的 Node 对象中获取变换矩阵。我发现了类似的东西:

osg::Matrix mat = osg::computeWorldToLocal(this->getNodePath());        
std::cout << "X: " << mat.getTrans().x() << std::endl;
std::cout << "Rot X: " << mat.getRotate().x() << std::endl;
std::cout << "Scale X: " << mat.getScale().x() << std::endl;

但我只想拥有矩阵,可以吗?

谢谢。

PD:我正在使用 nodeVisitor 来执行此操作。

【问题讨论】:

    标签: c++ openscenegraph


    【解决方案1】:

    我认为您只想将矩阵打印到控制台。在这种情况下,请使用&lt;osg/io_utils&gt; 中提供的流运算符:

    #include <osg/io_utils>
    
    std:: cout << mat;
    

    【讨论】:

    • 虽然我什至没有为此工作,但我不得不说谢谢你的回答。另外,这是我的第一篇文章,我不记得我做了什么来解决这个问题,但我终于做到了。
    • 这个问题已经一年多了,我不记得我需要什么,但最后我做到了
    【解决方案2】:

    你的意思是你只想要一个指向 4x4 数组的指针吗?试试 mat.ptr();或者你可以使用重载的 () 来获取单个元素:

    mat(0,0) mat(0,1) mat(0,2) mat(0,3)
    mat(1,0)     .        .        .
    mat(2,0)     .        .        .
    mat(3,0)     .        .    mat(3,3)
    

    ps,您可以使用 decompose 在一次调用中获取平移、旋转和缩放值。

    【讨论】:

      【解决方案3】:

      好吧,你在 osg::Matrix mat 中有矩阵。我不清楚您所说的“我只想拥有矩阵”是什么意思。如果你澄清一下,我可能会帮助你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 2015-03-17
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多