7

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?

4

1 回答 1

6

您可以像这样在每一列上应用homogenous() :

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()
于 2013-04-29T22:39:48.917 回答