Advertisement

TextureMapped Font Problem - lesson 17

Started by August 13, 2003 01:14 PM
5 comments, last by Arch@on 21 years, 6 months ago
I started doing fonts and got around TextureMapped2d fonts, more specifically lesson 17. Now I load my font from a 8bit tga that I converted from nehe''s font. I have the texture loaded in memory and I have built the display list, however I can''t figure out how to make it visible correct. For some reason OpenGL hates me and doesn''t show it transparent, and if it does it won''t show on white background and so on. I have tried using different blendfuncs, but it just doesn''t work. What the hell am I doing wrong. Code is exactly the same as in NeHe''s, except that I use 8-bit targa. I used paintshop pro to convert it.
Since your loading an 8-bit, there may not be an alpha channel. This may be the problem. You may have to set the alpha channel when loading it, like in his bmp tutorial. I may be completly wrong though, but it''s worth checking.
Advertisement
You should create an alpha channel for the image and use alpha testing..

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5f);

Now any pixel with an alpha of less than 0.5 will be transparent.
I''m not much of a man when it comes down to graphical programs. How do I create the alpha channel? With quick look through PSP 8.0 I could not see any way to do this. Is this palette transparency?
I figured out how to set the alpha, I made the background as alpha so it won''t be rendered. However it didn''t change anything

	glEnable(GL_ALPHA_TEST);	glAlphaFunc(GL_GREATER, 0.0f);			glEnable(GL_TEXTURE_2D);	glBindTexture(GL_TEXTURE_2D, texID);	glDepthMask(GL_FALSE);	//glEnable(GL_BLEND);								// For transparent background	//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);    glMatrixMode(GL_PROJECTION);    glPushMatrix();    glLoadMatrixf(ortho);         glMatrixMode(GL_MODELVIEW);    glPushMatrix();    glLoadIdentity();	glTranslated(x, y, 0);							// Position The Text (0,0 - Top Left)	// Note: the 128 below refers to the font texture containing 2 font sets.	// Use 0 for the first set, or 128 for the second set.	glListBase(base-32+(128*set));	glColor4f(font.red, font.green, font.blue, font.alpha);			// Set text colour.	glCallLists(strlen(string), GL_UNSIGNED_BYTE, string);		// Write The Text To The Screen	glMatrixMode(GL_PROJECTION);	glPopMatrix();									// Restore old Projection Matrix	glMatrixMode(GL_MODELVIEW);	glPopMatrix();		//glDisable(GL_BLEND);	glDepthMask(GL_TRUE);	glDisable(GL_TEXTURE_2D);		glDisable(GL_ALPHA_TEST);
In the code above, you''ve commented out the lines that enable and set the blending functions. Is that a mistake?W

When I ripped NeHe''s code for doing transparent text, I found the only way I could get it to work was if all four channels were identical (r,g,b & a): 255 where the text is, 0 where its transparent. I then did a tiny blur to soften the edges. I also force the alpha channel to 1 in glColor4f(). Doesn''t really make logical sense, but it works fine. I''m in the process of re-writing it, as a 32bit TGA is overkill for a simple monochrome font. Oh well.

Advertisement
Exactly, I can get it somehow transparent with 8-bit TGA, however the text is mildly transparent too and when on white background its completely transparent.

This topic is closed to new replies.

Advertisement