OSG: получить матрицу преобразования из узла

Прежде всего, я должен извиниться за мой английский.

Я работаю над приложением, в котором мы должны в каждый момент знать атрибуты каждого узла (положение, вращение …), поэтому я подумал о том, чтобы взять из графа сцены матрицу преобразования каждого узла.

У меня проблема в том, что я не знаю, как это сделать. Например, если у меня есть что-то вроде:

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 для этого.

6

Решение

Я думаю, что вы хотите просто распечатать матрицу на консоли. В этом случае используйте оператор потока, предоставленный в <osg/io_utils>:

#include <osg/io_utils>

std:: cout << mat;
3

Другие решения

Вы имеете в виду, что вы просто хотите указатель на массив 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, вы можете использовать декомпозицию, чтобы получить значения Перевод, Вращение и Масштаб за один вызов.

1

Ну, у вас есть матрица в osg :: Matrix mat. Мне не ясно, что вы подразумеваете под «я хотел бы иметь только матрицу». Если вы уточнить, я, вероятно, могу вам помочь.

0
По вопросам рекламы [email protected]