Как передвинуть 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 правильно и как достичь результата, который я описал выше


Ответы (0 шт):