Короче говоря, вы можете просто умножить на обратную матрицу Matrix1:
glm::mat4 Matrix2And3 = glm::inverse(Matrix1) * transMatrix;
Порядок операций важен, если вы хотите удалить Matrix3, вам нужно вместо этого сделать transMatrix * inverse (Matrix3). Если бы это была матрица Matrix2, вам нужно было бы удалить matrix1 (или 3), а затем matrix2.
Однако инверсии матрицы следует избегать любой ценой, поскольку это очень неэффективно, и для вашего ситуацию можно избежать.
То, что вы называете Матрицей, на самом деле является просто трехмерной позой: Положение + Вращение + Размер. Предполагая, что вы используете равномерное масштабирование (Size = float) компонент mat3 вашей позы, то есть это ортогональная матрица, этот тип матриц имеет специальное свойство:
Inverse (O) = = Транспонирование (O)
Вычисление транспонирования матрицы намного проще, чем обратное, это означает, что вы можете сделать следующее, чтобы достичь тех же результатов, но намного быстрее :
mat4 inv = (mat4)transpose((mat3)Matrix1);
inv[3] = glm::vec4(-position1, 1.0f);
mat4 Matrix2And3 = inv * transMatrix;
Если вы хотите go еще больше, я рекомендую вам создать класс Pose и предоставить операторы приведения для mat4 и mat3, чтобы легко получить полную производительность.