Sebbi
12-01-2001, 02:01 AM
hi !
i am currently programming a kind of class for fonts to use with opengl ... i load the font from a tga file with alpha channel (rgba) ... i "put" this image as textures on my polygon ... of course i do some calc to get the s and t coords for every char ... but it doesn't matter yet ...
... those areas of the fontmap that should be blended are red ... (255,0,0) ... and those areas have full transparency (through the alpha channel) ...
for testing i took the whole fontmap and put it on the poly ... i did it the following way:
// first create and init the texobject
glGenTextures(1, &TexName);
glBindTexture(GL_TEXTURE_2D, TexName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
/*
.
.
.
*/
// enable blending
glEnable(GL_BLEND);
// set blendingfunc
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
// enable texturing
glEnable(GL_TEXTURE_2D);
/*
.
.
.
*/
// bind texture
glBindTexture(GL_TEXTURE_2D, TexName);
// draw a rectangle ( for testing with the whole font map ...
glBegin(GL_POLYGON);
glColor4d(1.0, 1.0, 1.0, 1.0);
glTexCoord2d(0.0, 0.0);
glVertex2d(x, y);
glTexCoord2d(1.0, 0.0);
glVertex2d(x+CX, y);
glTexCoord2d(1.0, 1.0);
glVertex2d(x+CX, y+CY);
glTexCoord2d(0.0, 1.0);
glVertex2d(x, y+CY);
glEnd();
as you see i have used the gl_replace environment for the texture ... i have read that this means that opengl uses the colorvalue of the texture directly ... and i have used gl_nearest for filtering
ok now one picture of the result:
http://www.members.tripod.com/sebbi3783/clean.jpg
it looks good ... as you can see there isn't any artifact ore something ...
... but if i use gl_linear as texture filter the following was the result:
http://www.members.tripod.com/sebbi3783/effect.jpg
as you can see some parts of the red background are blended with the white font ... i think the reason is that opengl first smoothes the texture (cause of the filter) and that he blends ... so i understand that there are those red artifacts ... but how to solve ? ...
is there anybody that knows how i can blend textures correctly or how i can make it better ... any better ideas or solutions ... you can also tell me some general thinks about blending textures that have nothing to do with fonts or stuff ...
thanks !!!!!!!
[This message has been edited by Sebbi (edited 12-01-2001).]
i am currently programming a kind of class for fonts to use with opengl ... i load the font from a tga file with alpha channel (rgba) ... i "put" this image as textures on my polygon ... of course i do some calc to get the s and t coords for every char ... but it doesn't matter yet ...
... those areas of the fontmap that should be blended are red ... (255,0,0) ... and those areas have full transparency (through the alpha channel) ...
for testing i took the whole fontmap and put it on the poly ... i did it the following way:
// first create and init the texobject
glGenTextures(1, &TexName);
glBindTexture(GL_TEXTURE_2D, TexName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
/*
.
.
.
*/
// enable blending
glEnable(GL_BLEND);
// set blendingfunc
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
// enable texturing
glEnable(GL_TEXTURE_2D);
/*
.
.
.
*/
// bind texture
glBindTexture(GL_TEXTURE_2D, TexName);
// draw a rectangle ( for testing with the whole font map ...
glBegin(GL_POLYGON);
glColor4d(1.0, 1.0, 1.0, 1.0);
glTexCoord2d(0.0, 0.0);
glVertex2d(x, y);
glTexCoord2d(1.0, 0.0);
glVertex2d(x+CX, y);
glTexCoord2d(1.0, 1.0);
glVertex2d(x+CX, y+CY);
glTexCoord2d(0.0, 1.0);
glVertex2d(x, y+CY);
glEnd();
as you see i have used the gl_replace environment for the texture ... i have read that this means that opengl uses the colorvalue of the texture directly ... and i have used gl_nearest for filtering
ok now one picture of the result:
http://www.members.tripod.com/sebbi3783/clean.jpg
it looks good ... as you can see there isn't any artifact ore something ...
... but if i use gl_linear as texture filter the following was the result:
http://www.members.tripod.com/sebbi3783/effect.jpg
as you can see some parts of the red background are blended with the white font ... i think the reason is that opengl first smoothes the texture (cause of the filter) and that he blends ... so i understand that there are those red artifacts ... but how to solve ? ...
is there anybody that knows how i can blend textures correctly or how i can make it better ... any better ideas or solutions ... you can also tell me some general thinks about blending textures that have nothing to do with fonts or stuff ...
thanks !!!!!!!
[This message has been edited by Sebbi (edited 12-01-2001).]