Как передвинуть mesh в openGL следующим образом:
У меня есть куб, состоящий из 6 плоскостей. Все эти плоскости я генерирую в XY координатах и затем располагаю их путем трансформации матриц.
Мне нужно повернуть этот куб вокруг глобальных осей и затем передвинуть плоскость корректно.
Я покажу, что мне нужно и что у меня есть сейчас.
Я могу повернуть куб

Затем мне нужно передвинуть одну из плоскостей правильно, взависимости от поворота куба. Но плоскости все равно двигаются по глобальным осям и я не могу имплементировать передвижение согласно повороту.
Красная линия показывает как плоскость двигается сейчас, зеленая линия показывает как она должна двигаться

Как я создаю куб. Все вершины в плоскости в диапазоне (0,0) - (2, 2);
planeXY.setupMesh();
planeXY.setOrigin({1, 1, 1});
planeXY1.setupMesh();
planeXY1.setOrigin({1, 1, 1});
planeXY1.moveAlongGlobalAxis(QVector3D(0.0, 0.0, 2.0));
planeZY.setupMesh();
planeZY.setOrigin({1, 1, 1});
planeZY.rotate(QVector3D(0.0f, -90.0f, 0.0f));
planeZY.moveAlongGlobalAxis(QVector3D(-2.0, 0.0, 0.0));
planeZY1.setupMesh();
planeZY1.setOrigin({1, 1, 1});
planeZY1.rotate(QVector3D(0.0f, -90.0f, 0.0f));
planeXZ.setupMesh();
planeXZ.setOrigin({1, 1, 1});
planeXZ.rotate(QVector3D(90.0f, 0.0f, 0.0f));
planeXZ.moveAlongGlobalAxis(QVector3D(0.0, -2.0, 0.0));
planeXZ1.setupMesh();
planeXZ1.setOrigin({1, 1, 1});
planeXZ1.rotate(QVector3D(90.0f, 0.0f, 0.0f));
Mesh.cpp
void Mesh::moveAlongGlobalAxis(QVector3D coordinates)
{
QMatrix4x4 identityMatrix;
identityMatrix.translate(coordinates);
position += coordinates;
this->translationMatrix = identityMatrix * translationMatrix;
}
void Mesh::moveAlongLocalAxis(QVector3D coordinates)
{
this->moveAlongGlobalAxis(coordinates);
}
void Mesh::rotate(QVector3D rotation)
{
QMatrix4x4 identityMatrix;
identityMatrix.translate((-1) * this->position + this->origin);
identityMatrix.rotate(rotation.x(), QVector3D(1.0, 0.0, 0.0));
identityMatrix.rotate(rotation.y(), QVector3D(0.0, 1.0, 0.0));
identityMatrix.rotate(rotation.z(), QVector3D(0.0, 0.0, 1.0));
identityMatrix.translate(this->position - this->origin);
this->rotationMatrix = identityMatrix * this->rotationMatrix;
}
void Mesh::setOrigin(QVector3D origin)
{
this->origin = origin;
}
const QMatrix4x4 Mesh::getModelMatrix() const
{
return translationMatrix * rotationMatrix;
}
Эту функцию я хочу имплементировать и не понимаю как:
void Mesh::moveAlongLocalAxis(QVector3D coordinates)
{
this->moveAlongGlobalAxis(coordinates);
}
Я знаю, что для перемещения как я хочу мне нужно повернуть куб обратно, передвинуть, и затем повернуть снова, но я не могу сделать это, потому что я не могу сохранить повороты меша из-за моих первых трансформаций, где я поворачиваю плоскости для получения куба. Поэтому, я хочу знать, как трансформировать объекты в OpenGL правильно и как достичь результата, который я описал выше
