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 t开发者_运维知识库hat 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.
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:
- enable texturing and everything you need
- enable blending:
glEnable(GL_BLEND)
- select a blend mode
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
- set a color to blend with:
glColor4f(r * a, g * a , b * a, a)
- 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.
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);
精彩评论