Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OSG:从节点获取变换矩阵_C++_Openscenegraph - Fatal编程技术网

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)

另外,您可以使用“分解”在一次调用中获得平移、旋转和缩放值。

我想您只需要将矩阵打印到控制台。在这种情况下,请使用
中提供的流运算符:

#包括

虽然我还没在研究这个问题,但我还是要感谢你的回答。而且,这是我的第一篇文章,我不记得我做了什么来解决这个问题,但我最终做到了。从这个问题开始已经一年多了,我不记得我需要什么,但最后我做到了