Question

Dans mon application glut, je simule un avion avec la caméra. Lorsque la vitesse de l'avion est basse, j'ai l'intention de faire pointer du nez vers le sol lorsque la caméra tombe. Mon premier instinct a été de changer la hauteur jusqu'à ce qu'elle soit dirigée vers le bas à -90 degrés. Cependant, je ne peux pas simplement changer la hauteur, car si l'avion est incliné sur le côté ou à l'envers, il constaterait un changement de direction vers le sol.

Maintenant, j'essaie de faire une simulation approximative en déplaçant le "lookAt.y" vers le bas. Pour ce faire, j'essaie d'obtenir toutes les coordonnées actuelles de la caméra que j'utilise pour régler la caméra. (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z). Puis rappelez le jeu avec les nouvelles valeurs modifiées.

Je travaille avec Camera.cpp et Camera.h pour contrôler les fonctions de mon appareil photo. Vous pouvez les trouver ici

.

après avoir ajouté des méthodes pour obtenir toutes les valeurs, seules les valeurs des yeux sont réellement mises à jour lorsque divers mouvements de caméra sont effectués. Je suppose que ma question est de savoir comment récupérer ces valeurs.

L'appel glLoadMaxtrix est dans cette fonction

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

Existe-t-il un moyen d'obtenir les valeurs "œil", "lookAt" et "up" de la matrice ici? Ou devrais-je faire autre chose pour obtenir ces valeurs?

- Merci d'avance pour votre aide

Était-ce utile?

La solution

La classe de caméra vers laquelle vous créez un lien n'est pas une classe OpenGL, mais elle devrait être assez simple pour fonctionner.

La fonction citée prend juste les valeurs actuelles de l’objet caméra et les envoie à OpenGL. Si vous regardez la fonction de réglage de l'appareil photo, vous pouvez voir comment le programme calcule les valeurs qu'il stocke réellement.

La valeur de l'œil est stockée directement. La valeur lookAt est simplement la valeur de (eye-n), par calcul mathématique. La valeur up est la plus difficile, mais si je me souviens bien de mon calcul vectoriel, je pense que up = (n cross u).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top