1

私は次の機能を持っています

transformShape(Shape& shape, Eigen::Matrix4f transformation);

これは明らかに幾何学的形状を変換します。

Eigen::Vector3f

私は次のようなことをしたいと思っていました:

Eigen::Vector3f myVector = //calculate 
Eigen::Matrix4f mat = Eigen::Matrix4f::Identity();
mat = myVector * mat;
transformShape(shape, mat);

しかし、異なる次元の構造を乗算しているため、これは不可能です。私の質問は、Vector3f を 4 次元の Translation または Vector に変換する方法です。

乾杯

4

3 に答える 3

3

ベクトル (x,y,z) の変換行列は次の形式です

1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1

http://en.wikipedia.org/wiki/Translation_matrixを読む

使用できる Eigen::Translation もあります。

Vector3f v(1,2,3);
Matrix4f m = Affine3f(Translation3f(v)).matrix();
于 2013-02-25T19:14:46.947 に答える
1

生の Matrix4f の代わりに、便利な関数で Matrix4f をカプセル化する Eigen::Transform<> オブジェクトを使用できます。たとえば、変換がアフィンの場合、Affine3fを使用します。

Affine3f T;
T.matrix() = mat; // T.matrix() gives you full access to the underlying Matrix4f
Vector3f a, b;
a = mat * b;

Eigen を使用した空間変換の詳細については、前のリンクを参照してください。

于 2013-02-25T18:57:18.147 に答える
0

Vector4は、4番目の要素の値が0.0である必要があります。

それがPoint3の場合、1.0の値を使用してPoint4に拡張されます。

このコンポーネントは「w」と呼ばれ、「Vector4 w」を検索すると、次のような結果が得られます 。https ://gamedev.stackexchange.com/questions/14115/do-i-need-the-w-component-in -my-vector-class

于 2013-02-25T18:20:09.613 に答える