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?
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()