如何使用OpenGL创建三角形模板?

时间:2015-11-05 03:08:29

标签: c++ c opengl glut

我开始研究用C编写的OpenGL程序,该程序使用ASSIMP从用户的文件系统加载3D模型,并将其渲染到使用GLUT创建的窗口的中心。到目前为止,我已经完成了基本的渲染步骤。现在我想将相同的模型呈现为三角形的OpenGL模板,但我无法弄明白。我已经包含了一个代表所需效果的图像:
desired effect image
详细说明,我想在我的模型上制作一个三角形模板,如下所示:
elaborating diagram
我的代码非常基本,我所做的就是启用GL_STENCIL_TEST,设置模板函数,绘制我的三角形,然后绘制模型。

glEnable(GL_STENCIL_TEST);
// Fill stencil buffer with 0's
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
// Write 1's into stencil buffer where the hole will be
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glStencilFunc(GL_ALWAYS, 1, ~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
// Draw the triangle hole shape
glBegin(GL_TRIANGLES);
glVertex2f(-0.3f, -0.3f);
glVertex2f(0.f, 0.3f);
glVertex2f(0.3f, -0.3f);
glEnd();
// Draw scene, keeping fragments with 1's in the stencil buffer
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE);
glStencilFunc(GL_EQUAL, 1, ~0);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
// Renders the model
drawTheModel();
glDisable(GL_STENCIL_TEST);

我的GLUT显示模式如下:

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL);

当我运行上面的代码时,我得到的只是一个空窗口。我已经阅读了文档并检查了大量示例,但我似乎无法弄清楚我做错了什么。

有什么想法吗?

更新:我下载并编译了this stencil example并添加了我的三角形模板。我的三角形模板似乎进入深度缓冲区 - 调查。我的模板如何看待这个例子:
screenshot

0 个答案:

没有答案