OpenGL, GLSL, incohérence
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:
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:
1 2 3 4 5 6
|
#version 140
void main() {
gl_Position = ftransform();
} |
fragment shader :
Code:
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 ^^