2010-03-21 2 views
4

Exemple GLGravity iPhone montrant comment utiliser l'accéléromètre et OpenGL souffre d'un problème de blocage de cardan. Je me demande s'il existe un code disponible utilisant la rotation du quaternion au lieu des angles d'Euler? Toute aide sera grandement appréciée, je me bats avec cela depuis longtemps sans succès ...Exemple d'iPhone GLGravity utilisant des quaternions

+0

dernier j'ai vérifié, il y avait beaucoup de conetention sur si oui ou non les développeurs même besoin de s'inquiéter quaternions. L'alternative la plus commune que j'ai vue était d'utiliser des cadres de référence relatifs pour éviter le blocage du cardan (le compromis semblait être que les quaternions nécessitaient un peu moins de code mais étaient plus difficiles à comprendre - les différences de performance étaient probablement négligeables). Je posterais un lien mais cela fait trop longtemps que je n'en trouve pas. :( – FrustratedWithFormsDesigner

Répondre

3

Il aide à avoir une bonne compréhension de la théorie des choses avant d'essayer de l'implémenter et de l'utiliser soi-même. Voici deux articles d'introduction sur l'utilisation des quaternions pour les rotations. Les deux sont principalement liés à lisser rotation interpolations et évitant le blocage Cardan dans les rotations accumulées:

Gamedev.net - Quaternion Powers

Gamasutra - Rotating Objects Using Quaternions

Maintenant, en ce que le code réel va, je vous conseille de prendre et d'utiliser, une « force de l'industrie "bibliothèque de mathématiques de vecteur par opposition à rouler le vôtre. Ma suggestion serait de saisir la partie LinearMath du projet Middleware Bullet Physics. La physique des balles, et la bibliothèque mathématique linéaire incluse, est développée par certains des meilleurs ingénieurs de Sony et a été en développement actif pendant des années. Il est disponible gratuitement, n'est soumis à aucune licence (licence Zlib) et est utilisé par les développeurs de jeux professionnels du monde entier. La lib est plate-forme/architecture croisée et compile sur n'importe quoi de l'iPhone à la PS3.

La classe lib offre une classe Quaternion qui vous permet de créer des quaternions à partir d'angles euler ou d'une rotation autour d'un axe arbitraire, par ex. en utilisant setEulerZYX. Une fois que vous avez vos quaternions, il y a des fonctions intégrées pour toutes les opérations communes qui leur sont applicables; plus, moins, mul, normalize, slerp et bien plus encore.

Pour réellement appliquer votre quaternion final au rendu OpenGL, la classe Transform vous permet de construct une matrice à partir d'un quaternion. La classe de transformation inclut à son tour une fonction getOpenGLMatrix qui vous donne directement une matrice compatible à transmettre à OpenGL. Le lib comprend également une foule d'autres classes et fonctions matricielles et vectorielles très utiles.

Prenez le dernier dist Bullet de google code, ou simplement saisir la partie LinearMath du code directement à partir de la subversion en utilisant: svn checkout http://bullet.googlecode.com/svn/trunk/src/LinearMath

+0

Wow, merci pour l'information utile! Je vais passer du temps à creuser dans la théorie et essayer de construire quelque chose d'utile à partir de la bibliothèque.Ces liens sont très utiles, après des jours de recherche je ne les ai pas frappés. –

Questions connexes