2010-07-01 6 views
0

Je suis codage actuellement un peu AR-jeu pour moi-même sur l'iPhone 3GS ;-)accéléromètre gluLookAt

Je veux utiliser l'accéléromètre & données de boussole pour faire tourner mon appareil photo en opengl. La caméra a une position fixe et ne peut tourner que grâce à l'accéléromètre. L'iPhone est d'abord tourné de 90 ° pour avoir un plus grand écran ;-) Ainsi, les axes sont commutées ...

Quand je détiens l'iPhone straigt devant moi, je reçois ces valeurs:

  • Accel. x = 1
  • axxel.y = 0
  • accel.z = 0

Quand déplacer la ligne droite iPhone au-dessus de moi (sur ma tête) Je reçois ces valeurs:

  • accel.x = 0
  • accel.y = 0
  • accel.z = 1

Ainsi, les valeurs sont comprises entre:

  • x: 1 en ligne droite et 0 sur ma tête
  • y: 0 droite ahed et 0 au-dessus de ma tête
  • z: 0 tout droit et 1 au dessus de ma tête

Je veux utiliser x, y, z pour les coordonnées de mon monde de caméra. Par exemple. accel.x = 0.5 et accel.z = 0.5

L'appareil photo doit modifier les valeurs centreX, centreY et centreZ en fonction des valeurs que je reçois de l'accéléromètre.

Comment puis-je gérer cela?

Merci ;-)

Répondre

0

Si vous obtenez X = 1 avec le téléphone droit devant vous, il semble que vous tenez le téléphone dans le paysage, avec le bouton situé à droite, est-ce pas ? L'accéléromètre signale une force gravitationnelle, donc X = 1 signifie que vous descendez l'axe des X sur l'écran. Cela signifie que votre direction + X (pixels) sur l'écran est vraiment la direction + Y (dessin gl) dans votre monde OpenGL, ce qui correspond à une lecture de l'accéléromètre -X.

Dans cette orientation, le déplacement du téléphone vers la gauche & à droite donnera respectivement des lectures d'accéléromètre + Y et -Y. La force des lectures dépend de la force avec laquelle vous déplacez le téléphone. Si vous vous déplacez lentement, la lecture peut être indiscernable du bruit normal dans les données. Si vous vous déplacez à peu près à la vitesse à laquelle le téléphone tomberait si vous le lâchiez, votre lecture sera proche de "1" ("1 G-force" ou "1 gravité"). Si vous le déplacez plus vite, vous obtenir des lectures plus élevées.

NOTE: si vous tournez simplement, puis arrêtez de bouger, la lecture de l'accéléromètre reviendra à 0.La gravité est une mesure de l'accélération ("l'accélération due à la gravité"!), Pas en face. C'est pourquoi la boussole est devenue importante.

Si vous inclinez le téléphone vers le bas ou l'écran vers le haut, la lecture Z de l'accéléromètre changera, car la pesanteur se place «dans» ou «loin de» l'écran. Avec l'écran parfaitement vertical (comme tenir le téléphone droit devant votre visage, toute orientation), l'accéléromètre Z-lecture devrait être 0.

La façon dont vous traduisez ces données d'orientation à votre appareil photo dépend de votre application. Gardez simplement à l'esprit que "diriger" l'appareil photo en déplaçant le téléphone sera difficile à obtenir, car vous devez tenir compte à la fois de l'accélération et de la décélération des mouvements de l'utilisateur!

Pour vous aider à visualiser cela, consultez l'exemple de projet "Accéléromètre" de XCode. Recherchez simplement ce mot dans les documents, et vous verrez un exemple de projet que vous pouvez construire et utiliser pour avoir une idée de ce que signifie chaque axe.

Chance!

Questions connexes