Bonjour à tous,

J'ai un petit problème avec le stencil buffer. J'essaye déséspérément de créer des ombres portées mais rien à faire je n'y arrive pas. Est-il possible que le stencil buffer ne soit pas disponible sur mon système? J'utilise opengl avec sdl sous linux.

Sinon voici le code qui trace le rendu :

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
 
      glEnable(GL_LIGHTING);
      glDisable(GL_LIGHT0);   //On désactive la lampe.
      //On trace la scène
      glVertexPointer(3,GL_FLOAT,0,object1);
      glDrawArrays(GL_TRIANGLES,0,taille1/3);
      glVertexPointer(3,GL_FLOAT,0,object2);
      glDrawArrays(GL_QUADS,0,taille2/3);
 
      glEnable(GL_STENCIL_TEST);
      glDisable(GL_DEPTH_TEST);
      glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
      glStencilFunc(GL_ALWAYS, 0x0, 0xffffffff);
      /*glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_INCR);
      glStencilOpSeparate(GL_BACK, GL_KEEP, GL_KEEP, GL_DECR);*/ 
      glEnable(GL_CULL_FACE);
      glStencilOp(GL_KEEP,GL_KEEP,GL_INCR);
      glFrontFace(GL_CW);
      glVertexPointer(3,GL_FLOAT,0,shape);
      glDrawArrays(GL_QUADS,0,shape_vertex_count);
      glStencilOp(GL_KEEP,GL_KEEP,GL_DECR);
      glFrontFace(GL_CCW);
      glDrawArrays(GL_QUADS,0,shape_vertex_count);
      glDisable(GL_CULL_FACE);
 
      glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
      glEnable(GL_DEPTH_TEST);
      glStencilFunc(GL_EQUAL, 0, 0xffffffff);
      glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
 
      glEnable(GL_LIGHT0);
      glVertexPointer(3,GL_FLOAT,0,object1);
      glDrawArrays(GL_TRIANGLES,0,taille1/3);
      glVertexPointer(3,GL_FLOAT,0,object2);
      glDrawArrays(GL_QUADS,0,taille2/3);
 
      glDisable(GL_STENCIL_TEST);
      glEnable(GL_DEPTH_TEST);
J'ai essayé de tracer seulement le volume d'ombre il est correct et les faces sont bien orientées! Au final j'obtiens la scène illuminée mais sans ombre.

Merci d'avance pour vos idées a+!