C++ OSG:从节点获取变换矩阵
首先,我得为我的英语道歉 我正在开发一个应用程序,在这个应用程序中,我们必须随时了解每个节点的属性(位置、旋转…),因此我考虑从场景图中获取每个节点的变换矩阵 我的问题是我不知道怎么做。例如,如果我有类似于:C++ OSG:从节点获取变换矩阵,c++,openscenegraph,C++,Openscenegraph,首先,我得为我的英语道歉 我正在开发一个应用程序,在这个应用程序中,我们必须随时了解每个节点的属性(位置、旋转…),因此我考虑从场景图中获取每个节点的变换矩阵 我的问题是我不知道怎么做。例如,如果我有类似于: osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale"); osg::Matrix mat = osg::compute
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale");
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;
osg::ref_ptr root=osgDB::readNodeFile(“cessna.osg.15,20,25.trans.180,90360.rot.2,3,4.scale”);
我想从名为root的节点对象获取变换矩阵。我发现了类似于:
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale");
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;
osg::Matrix mat=osg::computeWorldToLocal(this->getNodePath());
std::cout好吧,在osg::matrix mat中有矩阵。我不清楚你所说的“我只想要矩阵”是什么意思。如果你澄清一下,我可能可以帮你。你的意思是你只需要一个指向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)
另外,您可以使用“分解”在一次调用中获得平移、旋转和缩放值。我想您只需要将矩阵打印到控制台。在这种情况下,请使用
中提供的流运算符:
#包括
虽然我还没在研究这个问题,但我还是要感谢你的回答。而且,这是我的第一篇文章,我不记得我做了什么来解决这个问题,但我最终做到了。从这个问题开始已经一年多了,我不记得我需要什么,但最后我做到了