我正在尝试实现深度传递模板阴影。 我现在正在工作的项目是古老的gl,所以我不能使用着色器等。 我找到了一个很棒的example,我试图转移到我的项目中。 但相反深度失败我现在尝试深度传递阴影。
glCullFace(GL_FRONT);
glStencilFunc(GL_ALWAYS, 0x0, 0xff);
glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);-->Decrease the stencil buffer
render_surface_shadow_volume(c->surfaces[i], c->position, light_pos);
glCullFace(GL_BACK);
glStencilFunc(GL_ALWAYS, 0x0, 0xff);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); ---> Increase the stencil buffer
render_surface_shadow_volume(c->surfaces[i], c->position, light_pos);
以下使用模板测试来替换不等于零的碎片。
glStencilFunc(GL_NOTEQUAL, 0x0, 0xff);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
draw_shadow();
我的第一个问题原因 glStencilOp(GL_REPLACE, GL_REPLACE , GL_REPLACE );为什么最后两个参数是GL_REPLACE而不是GL_KEEP不应该全部关于模板故障而不是深度失败?