2017-09-27 4 views
0

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

+0

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

+0

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

+0

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

Répondre

0

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 la x_b, y_b, z_b vecteurs unitaires de trame b, se décomposent d dans la trame a.
  • Son 3x1 supérieur droit sous-matrice est le vecteur de translation t_ab à partir de l'origine du cadre a à l'origine de la trame b, décomposé dans le cadre a.
  • Sa 4ème rangée est [0, 0, 0, 1].
  • Si p est un point dont les coordonnées dans le cadre b sont p_b= [px_b, py_b, pz_b, 1], puis les coordonnées p_a= [px_a, py_a, pz_a, 1] du même point dans la trame dans la trame a sont données par p_a.T=Qab * p_b.T, où x.T signifie la transposée du vecteur x. Notez que nous ajoutons un 1 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.

+0

Un peu compliqué mais je l'ai eu. Merci – itsaMe