8

まず第一に、私の英語について謝罪しなければなりません。

各瞬間に各ノードの属性 (位置、回転など) を知る必要があるアプリケーションに取り組んでいるので、シーン グラフから各ノードの変換行列を取得することを考えました。

私が抱えている問題は、これを行う方法がわからないことです。たとえば、次のようなものがあるとします。

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 を使用しています。

4

3 に答える 3

5

マトリックスをコンソールに出力したいだけだと思います。その場合は、 で提供されているストリーム オペレータを使用します<osg/io_utils>

#include <osg/io_utils>

std:: cout << mat;
于 2014-04-04T08:35:38.420 に答える
1

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)

ps、decompose を使用して、Translation、Rotation、Scale の値を 1 回の呼び出しで取得できます。

于 2013-02-05T17:04:37.250 に答える
0

さて、osg::Matrix mat にマトリックスがあります。「マトリックスだけが欲しい」という意味がよくわかりません。明確にすれば、おそらくあなたを助けることができます。

于 2013-02-01T16:32:36.020 に答える