Advertisement

Fontengine

Started by March 02, 2002 08:13 AM
7 comments, last by Gnomo 22 years, 11 months ago
Hi! I just coded a font engine. but when i draw something with it it is always brown. I tried it with glColor3f() but then everything else become the same color.
uhhhhhh... you are being a bit vague... maybe you could post some code so we can examine it?



''Qui habet aures audiendi audiat'' - Me

A link to the website of my 3D engine will follow as soon as I have something concrete to show... Which will be soon.
Advertisement
Thats my font engine:

//Font-Engine

ui FontListID=0;
HFONT HoldFont;



#define MAX_CHARS 256
#define FONT_HEIGHT 32



ui CreateOpenGLFont(LPSTR strFontName, int height)
{
ui FontListId=0;
HFONT hFont;

FontListId=glGenLists(MAX_CHARS);


hFont=CreateFont(height,
0,
0,
0,
FW_BOLD,
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
strFontName);

HoldFont=(HFONT)SelectObject(hDC,hFont);

wglUseFontBitmaps(hDC,0,MAX_CHARS-1,FontListId);

return FontListId;
}



void PositionText(int x,int y)
{
glPushAttrib(GL_TRANSFORM_BIT|GL_VIEWPORT_BIT);

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

y=SCREEN_HEIGHT-FONT_HEIGHT-y;

glViewport(x-1,y-1,0,0);

glRasterPos4f(0,0,0,1);

glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
}



void glDrawText(int x, int y, const char*strString,...)
{
char strText[256];
va_list argumentPtr;


if(strString==NULL)
return;


va_start(argumentPtr,strString);
vsprintf(strText,strString,argumentPtr);
va_end(argumentPtr);

PositionText( x, y);

glPushAttrib(GL_LIST_BIT);

glListBase(FontListID);

glCallLists(strlen(strText),GL_UNSIGNED_BYTE,strText);

glPopAttrib();
}



void DestroyFont()
{
glDeleteLists(FontListID,MAX_CHARS);
SelectObject(hDC,HoldFont);
}

Thats my function to draw:

int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();



glColor3f(0,0,1);
glDrawText(0,25,"Hi");
glColor3f(1,1,1);

glTranslatef(0.0f,0.0f,depth);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);


glBindTexture(GL_TEXTURE_2D,texture[filter]);

glBegin(GL_QUADS);


glNormal3f(0.0f,0.0f,1.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f);


glNormal3f(0.0f,0.0f,-1.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(-1.0f,1.0f,-1.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(1.0f,1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);

glNormal3f(0.0f,1.0f,0.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(-1.0f,1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,1.0f,1.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(1.0f,1.0f,-1.0f);

glNormal3f(0.0f,-1.0f,0.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);


glNormal3f(1.0f,0.0f,0.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(1.0f,1.0f,-1.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(1.0f,-1.0f,1.0f);

glNormal3f(-1.0f,0.0f,0.0f);
glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f(1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f);
glTexCoord2f(0.0f,1.0f); glVertex3f(-1.0f,1.0f,-1.0f);


glEnd();

xrot+=xspeed;
yrot+=yspeed;




CalculateFps();

return TRUE;
}
Everything seems OK but I am pretty sure you need to have this after wglUseFontBitmaps

SelectObject(hDC,HoldFont);
DeleteObject(hFont);

And remove the SelectObject() line from the DestroyFont() function
Disable GL_TEXTURE_2D just before you draw the text, and re-enable it after. (the texture you''re binding may be the cause for the brown colour)
Can you post some code?
I am a newbie.
Advertisement
Hey, can anybody post some code plz?????
  glDisable( GL_TEXTURE_2D );  


Death of one is a tragedy, death of a million is just a statistic.
If at first you don't succeed, redefine success.
Thx @ everyone.Now it works!

This topic is closed to new replies.

Advertisement