【问题标题】:Get current fragment color获取当前片段颜色
【发布时间】:2016-07-25 16:02:58
【问题描述】:

嘿,我目前在 OpenGL 中有一个系统,它使用 glBlendFunc 为不同的着色器流血,但我想做这样的事情

fragColor = currentColor * lightAmount;

我尝试使用gl_Color,但它已被贬低,我的引擎不允许我使用它。

【问题讨论】:

  • 不,我需要分配给 fragColor,因为我使用的是 GLSL 330,如果我只是将 fragColor 分配给 lightingamount 我场景中的所有东西都会变白
  • 你不能。 OpenGL ES 的扩展允许在某些平台上执行此操作。请参阅之前的类似问题:stackoverflow.com/questions/16531185/…。或者这个,即使它处理深度值,也基本相同:stackoverflow.com/questions/23362076/…
  • currentColorlightAmount 到底是什么?
  • Currenycolor 只不过是一个愿望,我想将它与我在早期着色器程序传递中渲染的内容交换出来,而 lightAmount 是我在计算光照后得到的

标签: opengl glsl opengl-3


【解决方案1】:

根据this document,片段着色器中没有对片段颜色的内置访问。 您可以做的是在另一个纹理中渲染您之前的通道,将这些纹理发送到 GPU(作为制服)并在您的最后一个通道中进行混合。

【讨论】:

  • 与我的解决方案相同:)
  • 我将如何加载 sampler2D?我已经将我的光通道和“漫反射”通道渲染到单独的纹理中,然后我将它们发送到组合通道着色器,但我不确定采样器的 texcoords 应该是什么
  • 您可以将 texcoords 与您正在渲染的四边形关联,使用它们的顶点坐标,或使用 gl_FragCoord 和视口大小
  • 你有一个很好的解决方案来解决我应该如何混合我的 light pass 和 base pass 吗?目前我做 BasePass / (1.0-LightPass) 但它变得太亮而且不正确
  • 这是另一个与此无关的问题,您应该问另一个问题。
猜你喜欢
  • 2021-12-15
  • 2015-05-18
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多