J'ai une matrice de transformation d'objet 3D dans l'espace du monde avec une position de caméra fixe. Je voudrais dériver la matrice de la caméra (position, vecteur de recherche, vecteur de droite) si l'objet n'a pas été transformé et que la caméra a été transformée à la place. Comment pourrais-je calculer cela? J'espère que ma question a du sensRécupère la matrice de la caméra à partir de la matrice de transformation de l'objet
Répondre
Prémisse. Représentons les transformations de coordonnées avec des matrices 4x4. Plus précisément, la matrice 4x4 Qab
représentant la coordonnée transformée de trame a
de trame b
est telle que:
- Son sous-matrice 3x3 supérieur gauche est la matrice de rotation
Rab
, à savoir la matrice orthonormée 3x3 dont les colonnes sont les ordinately les composants de lax_b
,y_b
,z_b
vecteurs unitaires de trameb
, se décomposent d dans la tramea
. - Son 3x1 supérieur droit sous-matrice est le vecteur de translation
t_ab
à partir de l'origine du cadrea
à l'origine de la trameb
, décomposé dans le cadrea
. - Sa 4ème rangée est [0, 0, 0, 1].
- Si
p
est un point dont les coordonnées dans le cadreb
sontp_b
= [px_b, py_b, pz_b, 1]
, puis les coordonnéesp_a
= [px_a, py_a, pz_a, 1]
du même point dans la trame dans la tramea
sont données parp_a.T
=
Qab * p_b.T
, oùx.T
signifie la transposée du vecteurx
. Notez que nous ajoutons un1
en tant que quatrième coordonnée fictive afin de pouvoir multiplier les points 3D par des matrices 4x4.
Maintenant, à votre question. Soit Qcw
la matrice 4x4 représentant la rotation et la translation de la caméra de la trame de référence mondiale, et Qow
la transformation analogue de l'objet du monde.
Ensuite, votre réponse est la transformation de la caméra à partir de l'objet Qco
. Nous pouvons le calculer en notant que nous pouvons aller de la trame o
à la trame c
en allant d'abord de o
à w
, puis de w
à c
. Par conséquent, il est Qco
=
Qcw * Qwo
, où Qwo
=
inv(Qow)
est l'inverse de Qow
, et représente le cadre mondial vu de l'objet.
Un peu compliqué mais je l'ai eu. Merci – itsaMe
La rotation, puis la traduction de l'objet est effectuée par 'M1 = T * R'. Transformer la caméra à la place est fait avec 'M2'. Le point est que si l'objet est vu de la caméra * même pour les deux options * cela signifie que «M1 = M2» – Ripi2
Ce [lien lookAt] (https://www.khronos.org/registry/OpenGL-Refpages/gl2. 1/xhtml/gluLookAt.xml) montre comment dériver la matrice lorsque la caméra est transformée. – Ripi2
voir [Comprendre les matrices de transformations homogènes 4x4] (https://stackoverflow.com/a/28084380/2521214) donc par exemple vous traduisez juste derrière l'objet | (par rapport à lui) et faites un inverse pour obtenir la matrice de la caméra avec mode ... mais de grossier vous devez prendre vos conventions ... – Spektre