Salut, je poste parce que je deviens fou là, j'ai dû faire une erreur débile mais je la vois pas et ça fait des heures que je suis dessus...
Je vous explique : comme je veux utiliser le stencil-buffer pour faire du shadowing volumique, et que je n'avais jamais encore utilisé ça, j'ai voulu commencer mollo.
Alors je dessine un carré rouge dans la moitié de l'écran, pour mettre le stencil de ces pixels à 1, puis je dessine mon modèle seulement là où les pixels ne sont pas à 1 (soit l'autre moitié de l'écran normalement, puisque je cleare le stencil-buffer à chaque passe).
Voilà le code correspondant (C++, openGL, utilise Qt et QGLViewer)
le rectangle rouge est bien tracé à l'écran, mais ma scène l'est aussi et en entier et détail 'amusant', que je mette GL_EQUAL, GL_NEVER ou GL_ALWAYS dans mon dernier glStencilFunc, ca ne change rien !!! pourtant le stencil test est enabled, je comprends vraiment pas.
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 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // ... glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS,1,0xffffffff); glStencilOp(GL_REPLACE,GL_REPLACE,GL_REPLACE); //startScreenmachin c'est pour tracer en 2d sur l'écran //en donnant les coordonnées réelles, préimplémenté dans QGLViewer //et d'expérience ca marche bien startScreenCoordinatesSystem(); glDisable(GL_LIGHTING); glDepthMask(false); int w=width()/2; int h=width()/2; glBegin(GL_QUADS); glColor3f(1.0f,0.0f,0.0f); glVertex2i(0,0); glVertex2i(w,0); glVertex2i(w,h); glVertex2i(0,h); glEnd(); glEnable(GL_LIGHTING); glDepthMask(true); stopScreenCoordinatesSystem(); glStencilFunc(GL_EQUAL,0,0xffffffff); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glColor3f(1.0f,1.0f,1.0f); renderModel(); glDisable(GL_STENCIL_TEST);
voilà merci d'avance à celui ou celle qui aura une idée pour me sortir de là
Partager