jeudi 2 février 2012

Tutoriels NeHe, Leçon 3 Porté sur iPhone

Voici la version iPhone de Leçon 3 NeHe.

Voici le code porté pour la leçon 3.

Encore une fois, la plupart de ce qui est là est valable, et vous devriez lire la leçon originale - Je ne vais pas pour couvrir tout - mais il ya certains morceaux de fonctionnalité dans la leçon 03 qui ne sont pas disponibles sur l'iPhone.
Tout d'abord, glColor3f () n'existe pas dans OpenGL ES - vous devez utiliser glColor4f () au lieu. La seule différence est que vous devez passer, non seulement une valeur pour le rouge, vert et bleu, mais aussi pour l'alpha. Vous pouvez toujours définir vos propres glColor3f () comme ceci:

#define glColor3f(r,g,b) glColor4f(r,g,b,1.0)

Bien qu'il soit sans doute plus facile si vous venez de vous habituer à utiliser glColor4f ().

Les autres bits de fonctionnalité manquante est un peu plus complexe, et elle nous oblige à sauter en avant du tutoriel à nouveau. Dans le didacticiel, lors de l'élaboration du triangle, ils changent la couleur à chaque sommet. Entre les appels à glBegin () et glEnd (), ils ont mis une couleur, définir un sommet, définir une nouvelle couleur, de définir une autre vertext, etc OpenGL interpole ensuite les valeurs inbetween pour donner un effet joli dégradé. Cependant, parce que nous devons définir nos sommets en utilisant un large vertex dans OpenGL ES, il n'ya pas moyen de changer les couleurs entre les sommets de la façon dont ils faire dans cette leçon.

Tout n'est pas perdu, cependant. Il ya très peu en OpenGL qui ne peut pas être fait en OpenGL ES, et dans ce cas, nous pouvons obtenir la même fonctionnalité en utilisant un éventail de couleurs, ce qui est juste un tableau de valeurs comme le tableau de vertex de la leçon précédente. Dans la leçon, ils ont mis la couleur au rouge avant de définir le premier sommet, puis au vert avant le second, puis au bleu pour le troisième sommet. Nous pouvons réaliser la même chose en définissant un autre tableau de valeurs GLfloat, comme ceci:

const GLfloat triVertexColors[] = {
1.0f, 0.0f, 0.0f, 1.0f, // Red
0.0f, 1.0f, 0.0f, 1.0f, // Green
0.0f, 0.0f, 1.0f, 1.0f // Blue
};

Dans ce cas, nous définissons chaque couleur avec 4 valeurs (rouge, vert, bleu, alpha), et notre tableau a une couleur pour correspondre à chacun des sommets dans notre tableau de vertex, ce qui signifie une série de douze articles (4 chars par les temps de couleur trois sommets). Si OpenGL va tirer, il va utiliser les quatre premières valeurs de ce tableau pour définir la couleur pour le premier sommet du tableau de vertex, le second de quatre valeurs pour définir la couleur pour le deuxième sommet dans notre tableau, et les quatre dernières valeurs pour définir la couleur pour le dernier sommet.

Afin d'utiliser un tableau de couleur, nous avons pour l'activer, comme nous l'avons fait avec les vertex arrays. Encore une fois, cela peut être fait une fois, dans la configuration, ou peut être activée et désactivée au besoin à l'exécution. Généralement, vous l'activer avant que vous l'utilisez, puis désactiver postfaces, sinon les futurs appels d'glColor4f () sera ignoré, ce qui peut ne pas être ce que vous voulez. Voici l'appel pour permettre aux tableaux de couleur:
glEnableClientState (GL_COLOR_ARRAY);
et de désactiver
glDisableClientState (GL_COLOR_ARRAY);

Puis, avant que nous appelons glDrawArrays (), nous avons à dire au sujet de notre gamme OpenGL couleur. Nous faisons cela comme ceci:
glColorPointer (4, GL_FLOAT, 0, triVertexColors);
L'appel est très similaire à notre glVertexPointer () de la leçon 02 (qui est aussi utilisé dans ce projet, bien sûr). Le premier argument indique à OpenGL que chaque couleur est composée de quatre valeurs. Le second argument indique à OpenGL que ces valeurs sont GLfloats. La troisième valeur est celle que vous pouvez oublier pour l'instant, et le dernier est le pointeur vers le tableau de couleur.

C'est tout ce qu'il ya à faire - faire fonctionner maintenant, et vous aurez votre triangle jolie, tout comme dans la leçon NeHe:


Aucun commentaire: