OpenGl:模板缓冲问题(Wall + Window)?

时间:2010-05-12 23:50:52

标签: opengl stencil-buffer

我想使用模板缓冲区创建一个带有窗口的墙。 我的代码如下所示:

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);

但这没有用,我得到了整个填充墙没有窗口,任何建议??

2 个答案:

答案 0 :(得分:1)

确保从窗口系统请求带有模板缓冲区的OpenGL上下文。除非您特别要求,否则您可能默认不会获得一个。

这是使用exampleGLUT。您需要查看glutInitDisplayMode()来电。

这是使用原始Win32的另一个examplePIXELFORMATDESCRIPTOR位是重要的部分。

如果您正在使用X11,

glXChooseVisual()可能就是您想看的地方。

如果您想要跨平台上下文管理,我建议SDL

答案 1 :(得分:1)

我没有测试过您的代码,但我认为您应该更改

glStencilFunc(GL_NOTEQUAL, 1, 1);

glStencilFunc(GL_EQUAL, 1, 1);