Question

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?

Was it helpful?

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()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top