Salut.
J'essaye de construire une interface 2d par dessus une vue 3d, mais je n'arrive pas à afficher mes sprites 2d.
Plutot que lancer de grandes explication, je vais vous mettre un code minimal de mes enchainements OpenGL à chaque Frame. J'aimerais que vous me disiez l'enchainement parait correct. Si ça ne viens pas de cet enchainement, alors ça viens d'ailleurs dans mon code. :p
Il doit bien y avoir 1 ou 2 truc manquant qui m'empêche d'afficher mes sprite 2d.
Je ne fais qu'un seul clear du color buffer et depht buffer, il y a peut-être besoin de le faire une nouvelle fois avant de draw la scene 2d? Y a-t-il d'autre fonctions pour gérer le blend?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 // Je clear ma frame glViewport(0, 0, viewportSize.width, viewportSize.height); glClearColor(0.f, 0.f, 1.f, 1.f); glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); // Je commence le rendu 3d // J'active le test de profondeur glEnable(GL_DEPTH_TEST); // Je draw ma scene 3d // Je désactive le test de profondeur glDisable(GL_DEPTH_TEST); // Je reset ma matrice de projection + view // Sous openGL ES 2.0, il n'y a pas de glProjection ou autre, les matrice sont passée manuellement au shader // Donc j'utilise un système fait main qui reproduit le fonctionnement Projection::identity(); // Reset la matrice Matrix4 view2d; // matrice qui transform la position des objets de coordonnée [0, longueur/largeur] vers des coordonnée [-1; 1] Projection::pushMatrix(view2d); // J'active le blending glEnable(GL_BLEND); // Je choisi un blending alpha glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Pour chaque sprite // J'applique la matrice du sprite Projection::pushMatrix(transform); // Je bind le shader et la texture, déclare un tableau de vertex, active les bon attributes et fais draw le sprite. Projection::popMatrix(); // Je disable le blendMode glDisable(GL_BLEND); // Et je swap les buffer pour afficher la scene eglSwapBuffers(...);
N'importe quelle remarque peut m'aider, même un exemple sous OpenGL 1
Partager