我有以下功能
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维的平移或矢量
干杯
答案 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