How to programmatically alpha fade a textured object in OpenGL ES 1.1 (iPhone)

PewterSoft picture PewterSoft · Oct 15, 2009 · Viewed 7.3k times · Source

I've been using OpenGL ES 1.1 on the iPhone for 10 months, and in that time there is one seemingly simple task I have been unable to do: programmatically fade a textured object. To keep it simple: how can I alpha fade, under code control, a simple 2D triangle that has a texture (with alpha) applied to it. I would like to fade it in/out while it is over a scene, not a simple colored background. So far the only technique I have to do this is to create a texture with multiple pre-faded copies of the texture on it. (Yuck)

As an example, I am unable to do this using Apple's GLSprite sample code as a starting point. It already textures a quad with a texture that has its own alpha. I would like to fade that object in and out.

Answer

Nikolai Ruhe picture Nikolai Ruhe · Oct 15, 2009

Maybe I'm not getting you right, but to me it seems trivial and I've been doing it my apps successfully. The way to go is:

  1. enable texturing and everything you need
  2. enable blending: glEnable(GL_BLEND)
  3. select a blend mode glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
  4. set a color to blend with: glColor4f(r * a, g * a , b * a, a)
  5. draw your geometry

The blend function is for porter-duff over using premultiplied colors/textures. The GL_TEXTURE_ENV_MODE must be set to GL_MODULATE, but that's the default.