我有两个函数,我想组合这两个函数的结果:
drawAmbient
drawDirectional它们各自单独工作得很好,仅使用环境光或平行光绘制场景。我想同时显示环境光和平行光,但遇到了一点麻烦。我试试这个:
[self drawAmbient];
glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);
[self drawDirectional];
glDisable(GL_BLEND);但我只看到了first draw的结果。对于两组绘制调用,我都以相同的方式计算深度。我总是可以渲染到纹理和混合纹理,但这似乎是多余的。有没有办法在渲染到默认帧缓冲区时将照明添加到一起?
发布于 2012-08-07 16:24:24
你说你在两个过程中计算深度的方法是相同的。这当然是正确的,但是因为默认的深度比较函数是GL_LESS,所以实际上在第二遍中不会渲染任何东西,因为深度永远不会小于深度缓冲区中的当前深度。
因此,对于第二次测试,只需将深度测试更改为
glDepthFunc(GL_EQUAL);然后返回到
glDepthFunc(GL_LESS);或者,您也可以在整个运行时将其设置为GL_LEQUAL,以涵盖这两种情况。
发布于 2012-08-07 16:16:10
据我所知,你应该渲染照明到单独的渲染目标,然后将它们组合起来。因此,您将场景渲染到这些目标中:
不带lighting
然后结合纹理,所以final_color = textured * diffuse + specular。
https://stackoverflow.com/questions/11839965
复制相似问题