Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 602
PewterSoft Avatar asked Oct 15 '09 12:10

PewterSoft


2 Answers

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.

like image 76
Nikolai Ruhe Avatar answered Oct 21 '22 08:10

Nikolai Ruhe


Nikolai's solution is correct; please ignore what I said on the Apple forums. Since the texture is pre-multiplied, the per-vertex color should be too. You should use GL_ONE rather than GL_SRC_ALPHA, and do this:

glColor4f(1., 1., 1., myDesiredAlpha);
glColor4f(myDesiredAlpha, myDesiredAlpha, myDesiredAlpha, myDesiredAlpha);
like image 37
prideout Avatar answered Oct 21 '22 08:10

prideout