Per-component alpha-channels with OpenGL?

2019-06-26 19:04发布

问题:

Is it possible to perform blending with one alpha channel per component (one for red, one for green and one for blue) with OpenGL? If not, what are some possible workarounds?

回答1:

This isn't something that's directly supported. It's fairly easy to achieve on your own though:

  • Render your triangle (or whatever) using the 3-channel "alpha" texture and glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR)
  • Enable multitexture and set the "alpha" texture to modulate your rgb texture
  • Render your triangle with glBlendFunc(GL_ONE, GL_ONE)


回答2:

You could do this with a pixel shader, but you'd need to find a way to store/access per component alpha values. You could store them in a texture and treat the normal color components as the alpha values for the corresponding color.

What effect/output are you trying to achieve?



回答3:

What you're describing is not possible with OpenGL.

That said, considering that you're new to OpenGL, maybe what you're describing is not exactly what you're after ?

Blending is the step that happens once you decided what color your current fragment (usually coming from a triangle) is supposed to have. That color needs to be merged with the previous color in the frame-buffer. Are you sure that's what you're after ?



回答4:

You are probably looking for: GL_ARB_blend_func_extended