Прежде всего, я должен извиниться за мой английский.
Я работаю над приложением, в котором мы должны в каждый момент знать атрибуты каждого узла (положение, вращение …), поэтому я подумал о том, чтобы взять из графа сцены матрицу преобразования каждого узла.
У меня проблема в том, что я не знаю, как это сделать. Например, если у меня есть что-то вроде:
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale");
Я хочу взять матрицу преобразования из объекта Node с именем root. Я нашел что-то вроде:
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;
Вы имеете в виду, что вы просто хотите указатель на массив 4×4? Попробуйте 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, вы можете использовать декомпозицию, чтобы получить значения Перевод, Вращение и Масштаб за один вызов.
Ну, у вас есть матрица в osg :: Matrix mat. Мне не ясно, что вы подразумеваете под «я хотел бы иметь только матрицу». Если вы уточнить, я, вероятно, могу вам помочь.