J'ai écrit une classe de caméra à la première personne pour android.Première personne Rotation de caméra en 3D
La classe est très simple, l'objet de la caméra a ses trois axes X, Y et Z
et il y a des fonctions pour créer la matrice modelview (c.-à-calculateModelViewMatrix()), faire pivoter la caméra le long de sa X et Y axe et Traduire la caméra le long de son axe Z.
Je pense que ma calibrage ModelViewMatrix est correcte et je peux aussi traduire la caméra le long de l'axe Z.
La rotation le long de l'axe des x semble fonctionner, mais le long de l'axe Y, cela donne des résultats étranges. Un autre problème avec la rotation semble être qu'au lieu de faire tourner la caméra, mon modèle 3D commence à tourner à la place le long de son axe.
J'ai écrit une autre implémentation basée sur le point de vue et en utilisant la fonction GLU.gluLookAt() de l'OpenGL ES pour obtenir la matrice ModelView mais qui semble souffrir exactement des mêmes problèmes.
EDIT
d'abord merci pour votre réponse.
J'ai effectivement fait une deuxième implémentation de la classe Camera, cette fois en utilisant les fonctions de rotation fournies dans la classe android.opengl.Matrix comme vous l'avez dit. J'ai fourni le code ci-dessous, ce qui est beaucoup plus simple. À ma grande surprise, les résultats sont «exactement» les mêmes. À mon grand étonnement, les résultats sont exactement les mêmes. Cela signifie que mes fonctions de rotation et les fonctions de rotation d'Android produisent les mêmes résultats. J'ai fait un test simple et regardé mes données. Je viens de faire pivoter le point LookAt de 1-dgree à la fois autour de l'axe Y et j'ai regardé les coordonnées. Il semble que mon point LookAt soit en retard par rapport à l'angle de rotation exact, par ex. à 20 degrés il a seulement roatated 10 à 12 degrés. Et après 45 degrés il commence à s'inverser