Reputation: 61
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.
Upvotes: 6
Views: 7430
Reputation: 81878
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:
glEnable(GL_BLEND)
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
glColor4f(r * a, g * a , b * a, a)
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.
Upvotes: 15
Reputation: 3019
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);
Upvotes: 2