繁体   English   中英

OSG:从节点获取变换矩阵

[英]OSG: Get transform matrix from a node

首先,我必须为我的英语道歉。

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

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

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来做这件事。

我想你只想将矩阵打印到控制台。 在这种情况下,请使用<osg/io_utils>提供的流运算符:

#include <osg/io_utils>

std:: cout << mat;

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

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在一次调用中获取Translation,Rotation和Scale值。

好吧,你有osg :: Matrix mat中的矩阵。 我不清楚你的意思是“我只希望只有矩阵”。 如果你澄清,我可能会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM