что я пытаюсь сделать, это настроить функции, которые могут выполнять глобальные и объектные вращения, но у меня возникают проблемы с пониманием того, как выполнять вращения объектов в пространстве, так как просто умножение точки на вращение работает только для глобального пространства,поэтому моя идея состояла в том, чтобы построить вращение в пространстве объектов, а затем умножить его на обратную матрицу объектов, предположительно убирая все лишние вращения между объектом и глобальным пространством, поэтому все еще поддерживая вращение пространства объектов, но в глобальных значениях яЯ ошибался в этой логике, так как она не работала, вот мой код, если вы хотите проверить его, все функции, которые он вызывает, были протестированы на работу:
// build object space rotation
sf::Vector3<float> XMatrix (MultiplyByMatrix(sf::Vector3<float> (cosz,sinz,0)));
sf::Vector3<float> YMatrix (MultiplyByMatrix(sf::Vector3<float> (-sinz,cosz,0)));
sf::Vector3<float> ZMatrix (MultiplyByMatrix(sf::Vector3<float> (0,0,1)));
// build cofactor matrix
sf::Vector3<float> InverseMatrix[3];
CoFactor(InverseMatrix);
// multiply by the transpose of the cofactor matrix(the adjoint), to bring the rotation to world space coordinates
sf::Vector3<float> RelativeXMatrix = MultiplyByTranspose(XMatrix, InverseMatrix[0], InverseMatrix[1], InverseMatrix[2]);
sf::Vector3<float> RelativeYMatrix = MultiplyByTranspose(YMatrix, InverseMatrix[0], InverseMatrix[1], InverseMatrix[2]);
sf::Vector3<float> RelativeZMatrix = MultiplyByTranspose(ZMatrix, InverseMatrix[0], InverseMatrix[1], InverseMatrix[2]);
// perform the rotation from world space
PointsPlusMatrix(RelativeXMatrix, RelativeYMatrix, RelativeZMatrix);