Convert a vector of 3D point to homogeneous representation in Eigen
3d, eigen, geometry, homogenous-transformation
Solution
You can apply homogenous() on each column like this:
Matrix4f mat = ...; // your affine transformation stored as a 4x4 matrix
float *data = ...; // your raw buffer storing 3D point as [XYZXYZXYZ...]
mat * Map<Matrix<float, 3, Dynamic> >(data,3,N).colwise().homogeneous()
Problem
I have a buffer containing N 3D points stored as `[XYZXYZXYZ ... XYZ]`. This buffer can be directly mapped to a `Eigen::Matrix<float, 3, N>` using Eigen::Map. Since I will transform the points using affine transformations (i.e `Eigen::Matrix4f` matrices) I would like to map the same buffer to an eigen structure that allows me to consider the buffer as a `Eigen::Matrix<float, 4, N>` matrix where the last row only contains 1s, i.e. each single point is represented by the homogeneous vector [X Y Z 1]. Is there a convenient way to do this without copying the original buffer or applying the transformation on each single point?