Objetos de transformação OpenGL com várias rotações de diferentes eixos

Estou criando um programa de modelagem e gostaria de fazer transformações em objetos em seu próprio espaço e depois atribuir esse único objeto a um grupo para girar em torno de outro eixo em que o grupo gira. No entanto, eu também gostaria de poder fazer transformações no próprio espaço do objeto quando ele for combinado.

Manipulando o objeto individual, eu escolho o centro do objeto.

glm::mat4 transform;
transform = glm::translate(transform, - obj.meshCenter);
glm::mat4 transform1;
transform1 = glm::translate(transform1, obj.meshCenter);
obj.rotation =  transform1*obj.thisRot*transform;

Então eu envio isso para o shader,

glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(obj.translation*obj.rotation*objscale);

Gostaria agora de rodar este objeto em torno de outro eixo, digamos um eixo de (5,0,0) de 45 graus.

Agora tenho:

glm::mat4 groupR;
groupR = glm::rotate(groupR,glm::degrees(45.0f),glm::vec3(5,0,0));
obj.groupRotation = groupR;
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, 
glm::value_ptr(obj.groupRotation*obj.translation*obj.rotation*objscale)

Agora movi o objeto do espaço local para o espaço do grupo. Estou com um pouco de dificuldade agora em operar as transformações no próprio espaço do objeto quando combinadas com a rotação do grupo. Eu tive sucesso limitado quando defino o eixo groupR como (0,1,0) da seguinte forma:

///Translating object in its own space///
glm::mat4 R = obj.groupRotation;
obj.translation = glm::inverse(R) * obj.translate * R;

o problema aqui é que isso só traduzirá o objeto corretamente em seu próprio espaço se o eixo de rotação de R (rotação do grupo) for igual a (0,1,0):

///Rotating object in its own space///
glm::mat4 R = obj.groupRotation;
obj.rotation = glm::inverse(R) * obj.rot * R;

Mais uma vez, as rotações estão incorretas. Estou pensando que talvez eu precise desfazer a tradução do eixo do groupR? e depois reaplicá-lo em algum lugar?

questionAnswers(2)

yourAnswerToTheQuestion