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 :
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();
  }
[...]
vertex shader :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#version 140
 
void main() {
  gl_Position = ftransform();
}
fragment shader :
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.);
  }
}
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 :/

J'espere que quelqun pourra m'aider à comprendre. Merci d'avance ^^