首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OpenGL中添加具有多个过程的灯光?

如何在OpenGL中添加具有多个过程的灯光?
EN

Stack Overflow用户
提问于 2012-08-07 13:48:39
回答 2查看 1.2K关注 0票数 1

我有两个函数,我想组合这两个函数的结果:

代码语言:javascript
复制
drawAmbient
drawDirectional

它们各自单独工作得很好,仅使用环境光或平行光绘制场景。我想同时显示环境光和平行光,但遇到了一点麻烦。我试试这个:

代码语言:javascript
复制
[self drawAmbient];

glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);

[self drawDirectional];

glDisable(GL_BLEND);

但我只看到了first draw的结果。对于两组绘制调用,我都以相同的方式计算深度。我总是可以渲染到纹理和混合纹理,但这似乎是多余的。有没有办法在渲染到默认帧缓冲区时将照明添加到一起?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-07 16:24:24

你说你在两个过程中计算深度的方法是相同的。这当然是正确的,但是因为默认的深度比较函数是GL_LESS,所以实际上在第二遍中不会渲染任何东西,因为深度永远不会小于深度缓冲区中的当前深度。

因此,对于第二次测试,只需将深度测试更改为

代码语言:javascript
复制
glDepthFunc(GL_EQUAL);

然后返回到

代码语言:javascript
复制
glDepthFunc(GL_LESS);

或者,您也可以在整个运行时将其设置为GL_LEQUAL,以涵盖这两种情况。

票数 3
EN

Stack Overflow用户

发布于 2012-08-07 16:16:10

据我所知,你应该渲染照明到单独的渲染目标,然后将它们组合起来。因此,您将场景渲染到这些目标中:

不带lighting

  • summary漫反射照明的
  • 纹理(使用环境光颜色填充并附加渲染所有灯光sources)
  • summary镜面反射照明(如果使用镜面反射组件)

然后结合纹理,所以final_color = textured * diffuse + specular

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11839965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档