我有两个函数要结合以下结果:
drawAmbient
drawDirectional
它们各自单独工作,仅使用环境光或仅使用定向光绘制场景。我想要显示环境光和定向光,但我有点麻烦。我试试这个:
[self drawAmbient];
glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);
[self drawDirectional];
glDisable(GL_BLEND);
但我只看到第一个draw
的结果。我以相同的方式计算两组绘制调用的深度。我总是可以渲染到纹理并混合纹理,但这似乎是多余的。我是否可以在渲染到默认帧缓冲区时将光源添加到一起?
答案 0 :(得分:3)
你说你在两次传球中以相同的方式计算深度。这当然是正确的,但由于默认的深度比较函数是GL_LESS
,所以在第二遍中实际上不会呈现任何内容,因为深度永远不会小于深度缓冲区中当前的深度。
因此,对于第二遍,只需将深度测试更改为
glDepthFunc(GL_EQUAL);
然后回到
glDepthFunc(GL_LESS);
或者您也可以将整个运行时间设置为GL_LEQUAL
以涵盖这两种情况。
答案 1 :(得分:0)
据我所知,你应该渲染光照以分离渲染目标,然后将它们组合起来。所以你将场景渲染到这些目标中:
然后组合纹理,final_color = textured * diffuse + specular
。