2013-04-11 134 views
1

我正在创建一个带有alpha的白色圆圈纹理的粒子发射器。无法使用传递给片段着色器的颜色对精灵着色。将颜色应用于Fragment着色器中的OpenGL ES 2.0 Point Sprite纹理?

我试过如下:

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

+0

我验证了德克的答案是正确的。谢谢,德克。虽然我的粒子发射器仍然无法工作!任何人都想要下载链接中的代码,并调整它以使其与ES2.0协同工作,请让我知道结果。谢谢! – 2013-04-12 01:07:13

回答

2

与您的代码,请看下面的例子:

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

然后gl_FragCol或者会是(0,0,0,0.5)黑 - 半透明。

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

基本上,你只想从你的纹理alpha通道,并将其应用到另一种颜色,对不对?那么你可以这样做:

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

谢谢!这有助于添加粒子的α..他们仍然看起来是白色的。难道这是我的混合函数:\t \t glBlendFunc(GL_SRC_ALPHA,GL_ONE); – 2013-04-12 00:53:03

+0

我不知道。混合的默认值通常是glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) – Dirk 2013-04-12 06:41:55