2010-05-12 15 views
1

Je veux créer un mur avec une fenêtre à l'intérieur, en utilisant un tampon stencil. Mon code ressemble à ceci:OpenGl: Problème de tampon stencil (Wall + Window)?

glEnable(GL_STENCIL_TEST); 
glClearStencil(0); 
glClear(GL_STENCIL_BUFFER_BIT); 
glStencilMask(1); 
glStencilFunc(GL_ALWAYS, 1, 1); 

glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); 
glDisable(GL_DEPTH_TEST); 
glColor3f(1,1,1); 

//Window 
glBegin(GL_POLYGON); 
glVertex3d(-5,0,-20); 
glVertex3d(-5,0,40); 
glVertex3d(-20,0,40); 
glVertex3d(-20,0,-20); 
glEnd(); 

glEnable(GL_DEPTH_TEST); 
glStencilFunc(GL_NOTEQUAL, 1, 1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 

glEnable(GL_CLIP_PLANE0);      
glClipPlane(GL_CLIP_PLANE0, eqr); 
glBindTexture(GL_TEXTURE_2D,texture[1]); 
glBegin(GL_POLYGON); 
glNormal3f(0.0f,-1.0,0.0f); 

//Wall 
glTexCoord2f(0.0f, 0.0f);glVertex3d(20,0,-20); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(20,0,40); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,40); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,-20); 

glEnd(); 
glDisable(GL_STENCIL_TEST); 

Mais cela ne fonctionne pas, je me suis tout le mur de remplissage sans la fenêtre en elle, des suggestions ??

Répondre

1

Assurez-vous de demander un contexte OpenGL avec un tampon stencil à partir de votre système de fenêtrage. Vous ne pouvez pas en obtenir un par défaut, sauf si vous le demandez spécifiquement.

Voici un example utilisant GLUT. Vous voulez regarder l'appel glutInitDisplayMode().

Voici une autre example utilisant Win32 brut. Le bit PIXELFORMATDESCRIPTOR est la partie importante.

glXChooseVisual() est probablement où vous voulez regarder si vous utilisez X11.

Je recommanderais SDL si vous voulez la gestion de contexte multi-plateforme.

1

Je ne l'ai pas testé votre code, mais je pense que vous devriez changer

glStencilFunc(GL_NOTEQUAL, 1, 1); 

à

glStencilFunc(GL_EQUAL, 1, 1);