Bonjour à tous,
je me permet de poster ici car je rencontre un petit problème avec GLSL (je suis débutant).
Dans mon appli OpenGL, en ayant effectué aucune modification sur la matrice ModelView, je la récupère avec glGet et j'obtient bien la matrice identitée. Dans mon fragment shader, je compare la matrice gl_ModelView à la matrice identitée, mais la comparaison me renvoit false =X (je le constate en modifiant la couleur des fragments en fonction du test).
Voici les différentes parties de code :
code C :
vertex shader :
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
40 [... chargement des shader et ouverture fenetre) ] glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); // me permet de voir l'interieur de la sphere que je dessine plus bas glCullFace(GL_FRONT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70, (double) 800 / 600, 1., 1000.); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); double mat[16]; glGetDoublev(GL_MODELVIEW_MATRIX, mat); for(int i = 0; i < 16; i++) { cout << mat[i] << ", "; // Ici la matrice idéntitée est bien affichée } cout << endl; bool loop = true; while(loop) { SDL_Event e; if(SDL_PollEvent(&e)) { switch(e.type) { case SDL_QUIT : loop = false; break; } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawSphere(40, 40, 3.); // Fonction que j'ai écrite qui ne modifie pas la matrice MV glFlush(); SDL_GL_SwapBuffers(); } [...]
fragment shader :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #version 140 void main() { gl_Position = ftransform(); }
Donc voila, l'interieur de ma sphere est affichée en rouge, ce qui n'est pas cohérent avec le resultat renvoyé par OpenGL dans mon code C :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #version 140 void main() { if(gl_ModelViewMatrix == mat4(vec4(1., 0., 0., 0.), vec4(0., 1., 0., 0.), vec4(0., 0., 1., 0.), vec4(0., 0., 0., 1.))) { gl_FragColor = vec4(1., 1., 1., 1.); } else { gl_FragColor = vec4(1., 0., 0., 1.); } }
J'espere que quelqun pourra m'aider à comprendre. Merci d'avance ^^
Partager