Dessin 2D avec OpenGL ES 2.0 (iOS)
Je suis en train d'apprendre comment utiliser OpenGL ES 2.0 sur iOS. Droit maintenant, je veux juste faire certaines de base d'animation 2D (par exemple, déplacer un rectangle autour de l'écran et changer sa taille). J'ai commencé avec le modèle de projet pour l'OpenGL ES fournies par Apple dans Xcode. Mon code ressemble à ceci:
static GLfloat squareVertices[] = {
-0.5f, -0.33f,
0.5f, -0.33f,
-0.5f, 0.33f,
0.5f, 0.33f
};
//Update attribute values.
glVertexAttribPointer(VERTEX_ATTR, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(VERTEX_ATTR);
glVertexAttribPointer(COLOR_ATTR, 4, GL_UNSIGNED_BYTE, 1, 0, squareColors);
glEnableVertexAttribArray(COLOR_ATTR);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);
Maintenant cela attirera un nice rectangle dans le milieu de l'écran. Mais si je commence à changer le rectangle en ajoutant le code suivant, il commence à look funky:
squareVertices[5] -= .001;
squareVertices[7] -= .001;
C'est comme si une partie de ce rectangle est rattaché au centre de l'écran. Je suis complètement nouveau pour OpenGL ES, donc je suis sûr que mon problème est évident. J'ai aussi supposer que cela a quelque chose à faire avec OpenGL ES cours d'une bibliothèque graphique 3D et je suis en train de le traiter comme un espace 2D. Donc ma question est: Quelle est la meilleure façon de dessiner et d'animer des objets en 2D avec OpenGL ES 2.0? J'ai vu quelques trucs en ligne pour OpenGL ES 1.1, mais ce n'est pas une grande aide pour moi. Sont leurs techniques spéciales pour le dessin 2D avec OpenGL ES 2.0, ou est-il une sorte de mode de dessin 2D?
Des conseils seraient grandement appréciés.
OriginalL'auteur macinjosh | 2010-12-26
Vous devez vous connecter pour publier un commentaire.
@macinjosh: C'est une réponse à la mise à jour de votre question pour ceux qui sont intéressé par la réponse. J'imagine que vous l'avez acquis de nouvelles connaissances depuis Déc '10 lorsque vous avez posté!
OpenGL sommets sont en 3D, pas en 2D. Pour être totalement sincère, ils sont en fait dans 4D, car ils comprennent un " w " composant en tant que bien, mais pour l'instant, il suffit de considérer que la valeur 1.0 comme un vecteur homogène.
En raison de leur 3D-ness, sauf si vous ajoutez un " z " dans un shader vous devez spécifier l'une comme l'un des sommets de l'attribut.
OriginalL'auteur KomodoDave
Parce que vous avez un " 3 " en tant que troisième paramètre de glVertexAttribPointer. Je crois que vous pouvez le mettre à 2, mais je n'ai pas essayé ce dans le GL. Ma conjecture est l'absence de l'axe z sera pourvu à l'interne comme à '0' (mais encore une fois, essayez et vous verrez!). En interne, il est probablement tout va être de 4 à flotteur avec des vecteurs de la 4e ('w') paramètre utilisé pour homogène de la multiplication de matrice gubbins.
Si vous êtes en train de faire cela sur un appareil mobile, vous pouvez également regarder dans le point fixe de maths (plus rapide sur certains appareils qui n'ont pas de virgule flottante co-pro) et aussi Vertex Buffer Objects, qui sont plus efficaces sur de nombreuses machines. Aussi, un fixe vertex format utilisé par
peut s'avérer plus efficace que le dispositif peut avoir optimisé les chemins de code pour "format_code' vous décider pour aller avec.
OriginalL'auteur Luther
Je suis nouveau avec l'OpenGL, mais le sommet n'a pas besoin de 3 à flotteur, un chaque axe X,Y,Z?
Donc, le premier sommet tableau sera :
le second sera :
Je suis VRAIMENT un newbie, donc ne me prenez pas trop au sérieux... 🙂
BTW, c'est la meilleure source de connaissances sur OpenGL, j'ai trouvé :
http://iphonedevelopment.blogspot.com/2010/10/opengl-es-20-for-ios-chapter-3.html
Espère que cette réponse tombe sous le sens...
OriginalL'auteur Bruno Belotti
Après quelques jouer, j'ai changé le code de dessin:
L'ajout de la troisième 0.0 flotteur à chaque sommet semblait faire l'affaire. Je ne sais pas pourquoi il en est ainsi si quelqu'un pourrait jeter un peu de lumière je serais aprécier.
OriginalL'auteur macinjosh