问题
On Qt3D, an entity can have these two components:
Qt3DRender::QGeometryRenderer
component which contains the mesh geometry data like vertex positions and normals.Qt3DCore::QTransform
component which contains the rotations, translations and scalings.
I intend to export the mesh data as STL with all the transformations applied to mesh geometry. I mean, all rotations and translations need to be applied to vertex positions...
When I access the mesh geometry data, like below, the transformations are not applied to geometry.
mesh->geometry()->attributes().at(i)->buffer()->data();
How can I apply the transformations to the geometry?
The Qt3DCore::QTransform
component gives me a 4x4 Matrix, but my vertex positions are 3x1
, I don't know how to apply this 4x4 matrix into my 3x1
vertex positions.
回答1:
From the math of transformations, to transform a vector with a 4x4 transformation matrix, everything has to be in homogeneous coordinates. You do this by adding a fourth component to the vector and setting it to one and then just multiply it with the (already homogeneous) 4x4 matrix. so:
QVector3D oldVec = QVector3D(x,y,z); //this is your 3x1 vertex position
QVector4D newVec = QVector4D(oldVec.x(), oldVec.y(), oldVec.z(), 1); //added 1 as fourth component
QVector4D transformedVec = matrix*newVec; //matrix is your 4x4 transformation matrix
//transformedVec is now what you need but with the fourth component still being the 1, so we just leave it out:
QVector3D transformedVec3D = QVector3D(transformedVec.x(), transformedVec.y(), transformedVec.z());
To read more about the math behind it, you can check out this link.
来源:https://stackoverflow.com/questions/51979168/how-to-apply-transformations-to-mesh-geometry