Download - Cocoaheads Rennes #8: La 3D sur iOS
La 3D sur iOS
Aymeric De Abreu
West Indie Collective
CocoaHeads Rennes #815 mars 2012
Quels sont les outils ?
• OpenGL ES
• QuartzCore
OpenGL ?
• Open Graphic Library
• API Graphique
• “Multi-plateformes”
• Bas niveau
OpenGL ?
Sur iOS ?
• OpenGL ES
• OpenGL for Embedded Systems
• Intégré dans Core Animation
Sur iOS ?
Utilisation ?
• Moteurs graphiques :
• UDK
• Unity
• Cocos2D/3D
• etc.
Architecture sur iOS
Implémentation
• Deux versions majeures :
• OpenGL ES 1.1
• OpenGL ES 2.0
• GLKit
Les maths
• (quelques) Mots clés :
• Matrices
• Projection
• Repère
Les matrices
• Représentation dans l’espace
• 4 dimensions pour la 3D (x, y, z, N)
• 3 dimensions pour la 2D (x, y, N)
• Utilisées pour toutes les transformations
Projection
• Conversion 3D vers écran (2D)
• Plusieurs types de projections
• Exprimée par une matrice
Repère
• Représentation de la 3D pour les maths
• Influence sur les transformations
OpenGL ES 1.1
• Plus compréhensible
• Compatibilité étendue (depuis iOS 2.0 !)
• Moins de maths ;-)
UIView + OpenGL ES
• Intégration à CoreAnimation
• Layer spécial : CAEAGLLayer
• Context : EAGLContext
UIView + OpenGL ES
Notions de base
• Les vertex
• Les couleurs
• Les transformations
Les vertex
• Les sommets
• Création d’une surface
• Ordre spécifique (inverse des aiguilles d’une montre)
• Définitions d’un tableau de vertex
• Choix de la surface à dessiner
Les vertex
Les vertex
Les couleurs
• Définition de la couleur de fond
• Une couleur pour chaque sommet
• Interpolation entre les sommets
Les couleurs
• Définition de la couleur de fond
• Une couleur pour chaque sommet
• Interpolation entre les sommets
Les textures
• Taille multiple de 2
• A partir de UIImage
• Coordonnées entre 0 et 1
Les textures
• < iOS 5
• Chargement des texture “à la main”
• >= iOS 5
• Utilisation de GLKTextureLoader
Les textures
• < iOS 5
• Chargement des texture “à la main”
• >= iOS 5
• Utilisation de GLKTextureLoader
Les transformations
• Translation
• Rotation
• Mise à l’échelle
La translation
glTranslatef(xt, yt, zt);
La translation
glTranslatef(xt, yt, zt);
La rotation
glRotatef(angle, xr, yr, zr);
Mise à l’échelle
glScalef(xs, ys, zs);
Transformations
• Attention à l’ordre des transformations
• Transformations sur le repère
Transformations
• Attention à l’ordre des transformations
• Transformations sur le repère
Animation simple
• Evolution des transformations dans le temps
Le tactile
• Implémentation des méthodes classiques :- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancel:(NSSet *)touches withEvent:(UIEvent *)event;
• Influence sur les variables de transformation
Le tactile
• Implémentation des méthodes classiques :- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancel:(NSSet *)touches withEvent:(UIEvent *)event;
• Influence sur les variables de transformation
OpenGL ES 2.0
• Basé sur des shaders
• Meilleures performances
• Plus compliqué
GLKit
• Wrapper OpenGL ES 2.0
• Basé sur des “effets”
• Simplification d’implémentation