【问题标题】:OpenGl: Stencil buffer problem (Wall + Window)?OpenGL:模板缓冲区问题(墙+窗口)?
【发布时间】:2011-02-18 21:31:26
【问题描述】:

我想创建一堵墙,里面有一个窗户,使用模板缓冲区。 我的代码如下所示:

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

但这行不通,我得到了没有窗户的整个填充墙,有什么建议吗??

【问题讨论】:

    标签: opengl stencil-buffer


    【解决方案1】:

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

    这是一个使用GLUTexample。你会想看看glutInitDisplayMode() 电话。

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

    glXChooseVisual() 可能是您在使用 X11 时想要查看的位置。

    如果你想要跨平台上下文管理,我推荐SDL

    【讨论】:

      【解决方案2】:

      我没有测试你的代码,但我认为你应该改变

      glStencilFunc(GL_NOTEQUAL, 1, 1);
      

      glStencilFunc(GL_EQUAL, 1, 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-06
        • 2018-06-23
        • 2012-07-11
        • 1970-01-01
        • 2016-01-31
        • 2011-04-16
        • 2014-01-17
        相关资源
        最近更新 更多