Upload
cocoaheadsrns
View
3.162
Download
1
Embed Size (px)
DESCRIPTION
La création d'animations 3D est un sujet qui peut faire peur de prime abord: "c'est compliqué, c'est mathématique et c'est long". Quand on dit ça, c'est que l'on n'a pas les bonnes clefs, les bons outils... Aymeric De Abreu (ingénieur d'études et sur iOS depuis plus de 2 ans) nous fait une véritable présentation didactique de l'utilisation d'OpenGL ES sur iOS. A grand renfort de démonstrations, il va de la construction de mesh à l'animation basique en passant par l'interaction avec le tactile; de l'animation simple au développement de jeux vidéo ... Vidéo sur la session sur Vimeo: http://vimeo.com/38695721
Citation preview
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