从Vector3f转换为Matrix4f

时间:2013-02-25 17:54:51

标签: c++ eigen

我有以下功能

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维的平移或矢量

干杯

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

您可以使用Eigen :: Transform<>而不是原始Matrix4f。用方便的函数封装Matrix4f的对象。例如,如果您的转换是仿射的,请使用Affine3f

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

有关使用Eigen的空间变换的详细信息,请参阅上一个链接。

答案 2 :(得分: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