Comment dessiner une texture 2D contexte OpenGL ES 2.0?
Je suis juste de commencer avec OpenGL ES 2.0, ce que je voudrais faire est de créer un simple 2D de sortie. Donné une résolution de 480x800, comment puis-je établir une texture d'arrière-plan?
[Mon environnement de développement Java /Android, donc des exemples se rapportant directement à qui serait le mieux, mais d'autres langues serait bien.]
Vous devez vous connecter pour publier un commentaire.
Même si vous êtes sur Android, j'ai créé un iPhone exemple d'application qui fait cela pour les images de la vidéo à venir dans. Vous pouvez télécharger le code de cet exemple de ici. J'ai un article à propos de cette application, qui n'est fondée sur la couleur de suivi d'objet à l'aide de la vidéo en direct que vous pouvez lire ici.
Dans cette application, j'ai dessiner deux triangles pour générer un rectangle, alors la texture en utilisant les coordonnées suivantes:
De passer à travers la vidéo image comme texture, j'utilise un simple programme avec la suite de vertex shader:
et le fragment shader:
Dessin est une simple question de programme:
réglage de la texture uniforme:
définition des attributs:
puis dessiner les triangles:
// Attribute index. enum { ATTRIB_VERTEX, ATTRIB_COLOR, ATTRIB_TEXTUREPOSITON, NUM_ATTRIBUTES };
Vous n'avez pas vraiment dessiner l'arrière-plan, au lieu de dessiner un rectangle (ou même plus correctement: deux triangles formant un rectangle) et de définir une texture qui. Ce n'est pas différent de l'élaboration de tout autre objet sur l'écran.
Il ya beaucoup d'endroits en montrant comment cela se fait, peut-être il y a même un androïde exemple de projet montrant.
La partie difficile est de trouver quelque chose à afficher devant ou derrière quelque chose d'autre. Pour que cela fonctionne, vous devez configurer un buffer de profondeur et de permettre le test de profondeur (glEnable(GL_DEPTH_TEST)). Et vos vertices besoin d'avoir une coordonnée Z (et dire glDrawElements que vos sommets sont constitués de trois valeurs, pas les deux).
Si vous ne le faites pas, les objets seront restitués dans l'ordre de leur glDrawElements() les fonctions sont appelées (sens selon vous dessinez dernier sera à la fin occultant le reste).
Mon conseil est de ne pas avoir une image de fond ou de faire quelque chose de compliqué, jusqu'à ce que vous obtenez le coup de lui. OpenGL ES 2.0 a un peu d'une courbe d'apprentissage abrupte, et des tutoriels sur 1 ES.x n'a pas vraiment aider à obtenir la 3D fonctionne car ils peuvent utiliser des fonctions d'assistance comme gluPerspective, qui 2.0 n'a tout simplement pas. Commencer par la création d'un triangle sur fond de rien. Ensuite, faire une place. Alors, si vous voulez aller à la fantaisie déjà, ajouter une texture. Jouer avec les positions. Voir ce qui se passe lorsque vous modifiez la valeur Z de vos vertices. (Indice: Pas beaucoup, si vous n'avez pas de test de profondeur activé. Et même alors, si vous n'avez pas de projection de perspective, les objets ne sont petits plus ils sont loin, de sorte qu'il sera encore sembler comme si de rien n'était)
Après quelques jours, il cesse d'être si sacrément frustrant, et vous avez finalement "get it", la plupart du temps.