【问题标题】:Applying color to a OpenGL ES 2.0 Point Sprite texture in Fragment shader?在片段着色器中将颜色应用于 OpenGL ES 2.0 Point Sprite 纹理?
【发布时间】:2013-04-11 22:34:47
【问题描述】:

我正在创建一个粒子发射器,其纹理是带有 alpha 的白色圆圈。无法使用传递给片段着色器的颜色为精灵着色。

我尝试了以下方法:

    gl_FragColor = texture2D(Sampler, gl_PointCoord) * colorVarying;

这似乎是在做某种加色。

我正在尝试移植这个: http://maniacdev.com/2009/07/source-code-particle-based-explosions-in-iphone-opengl-es/ 从 ES 1.1 到 ES 2.0

【问题讨论】:

  • 我验证了德克的回答是正确的。谢谢,德克。我的粒子发射器仍然无法工作!其他任何人都想下载链接中的代码并对其进行调整以使其与 ES2.0 一起使用,让我知道结果。谢谢!

标签: ios objective-c opengl-es opengl-es-2.0 particle-system


【解决方案1】:

使用您的代码,请考虑以下示例:

  • texture2D = (1,0,0,1) = 红色 - 完全不透明
  • colorVarying = (0,1,0,0.5) = 绿色 - 半透明

那么 gl_FragColor 将是 (0,0,0,0.5) 黑色 - 半透明。

通常,您可以使用mix 来插入值,但如果我理解您的问题,那就更容易了。

基本上,您只需要纹理中的 Alpha 通道并将其应用到另一种颜色,对吗?那么你可以这样做:

gl_FragColor = vec4(colorVarying.rgb, texture2D(Sampler, gl_PointCoord).a)

【讨论】:

  • 谢谢!这有助于向粒子添加 alpha。但它们仍然看起来是白色的。可能与我的混合功能有关:glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  • 我不知道。混合的默认值通常是 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多