How to color a grayscale texture removing the alpha channel?

Started by
2 comments, last by Sik_the_hedgehog 11 years, 3 months ago

Hello,

I need some help understanding what I am doing wrong.

I am drawing text into a texture and then render this texture to the screen. The texture used is a grayscale texture. Why? Because the tutorial I have the code from says it saves memory. OK, so I have white text that I need to color. That means I want to color my grayscale texture when I am drawing it. But the result turns out to be unsatisfying.

I am drawing the texture with a quad, each vertex getting the color red and full alpha (1,0,0,1);

Result 1:
bildschirmfoto20121230un.png
I use this code for blending:


glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

The red is as expected (full red), but the alpha channel is opaque.




Result 2:
bildschirmfoto20121230ub.png


glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);

With this code, I can remove the black background, but the red is rather pale.

Which settings could I use to remove the black background and keep the full red color? Or is this not possible and I should use an RGBA texture in the first place? I could then color the text when rendering it to the texture. Anyway, I want to understand what is going on, before I decide to spend more memory.

Advertisement

Hi :)

I don't know if it will work, but try this (I've used it somewhere)


glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA);

:)

One option might be to remove your vertex colours, then colour your text using GL_CONSTANT_COLOR/glBlendColor but this is not a good solution as it means you can't combine different coloured text into a single draw call.

Your better bet is to get your texture information into your alpha channel somehow, I think the easiest way to achieve this is to use the GL_INTENSITY format instead of the GL_LUMINANCE or GL_RGB format that I assume you're using at the moment.

I don't get why it doesn't work either... Make sure that when setting the modulation color you don't mess with the alpha channel somehow, though no idea how it could be affected (would need to know more about how your program works).

Also are you sure the red is more pale in the second pic? That looks more like an optical illusion because the background is brighter than black. Also, why do you need separate color and alpha? Black outline? Because if you just want a single color like in the second pic you could ditch the alpha altogether and stick to the single color channel (and halve memory usage, as a bonus).

EDIT: I think I know why it may not be working, is the texture in decal mode, by any chance? (wild guess here)

Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.

This topic is closed to new replies.

Advertisement