在Fragment着色器中将颜色应用于OpenGL ES 2.0 Point Sprite纹理?

时间:2013-04-11 12:35:26

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

我正在创建一个粒子发射器,其纹理是带有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

1 个答案:

答案 0 :(得分:2)

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

  • texture2D =(1,0,0,1)= red - 完全不透明
  • 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)