J'ai récemment travaillé sur un jeu utilisant OpenGL et C ++ via GLFW.
Dans le jeu, j'ai un dirigeable avec une tourelle montée dessus. Le dirigeable se déplace en coordonnées spatiales mondiales et la tourelle le «suit».
La tourelle possède son propre espace de coordonnées pour sa direction de visée / visée. Fondamentalement, lorsque la tourelle vise en direction (0,0,1)
, elle vise parallèlement à la direction de mouvement des dirigeables.
Pour donner à la tourelle une cible spatiale mondiale, j'ai une matrice qui prend les coordonnées spatiales mondiales et les transforme en coordonnées spatiales de la tourelle.
Alors que la tourelle tire, je veux qu'elle fasse apparaître des projectiles dans l'espace mondial, alors existe-t-il une façon élégante d'utiliser ma matrice de transformation pour convertir les coordonnées de l'espace de la tourelle en espace mondial?
Une façon plus générale de poser la question pourrait être: si j'ai une matrice M
qui prend les coordonnées d'un espace A
à l'autre B
. Existe-t-il un moyen simple d’utiliser M
pour obtenir les coordonnées de B
à A
?
la source
Si votre matrice de transformation est une matrice de rotation, vous pouvez simplifier le problème en profitant du fait que l'inverse d'une matrice de rotation est la transposée de cette matrice.
Si votre matrice de transformation représente une rotation suivie d'une translation, traitez les composants séparément. L'inverse équivaut à soustraire la translation puis à appliquer la transposition de la matrice de rotation.
la source
Dans votre lib matrice, il y a probablement une fonction appelée inverse. C'est probablement ce que vous recherchez.
la source