Cocoaheads Rennes #8: La 3D sur iOS

Preview:

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

Questions ?

julien@cocoaheads.frthomas.dupont@cocoaheads.fr

CocoaHeads Rennes #815 mars 2012

aymericdeabreu@gmail.com