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

您可以使用 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 进行空间变换的更多详细信息,请参阅上一个链接。

于 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 -我的矢量类

于 2013-02-25T18:20:09.613 回答