Skip to main content
gamedev.net
🔒 Locked

Text!

Started by Surg AKA Kunark Apr 18, 2003 at 1:31 PM 3 replies 800+ views
Original Post
Surg AKA Kunark
Surg AKA Kunark
Hi, I am new to programing, exspecialy OpenGL programming, I have one book that is useless called C++ for Dummies, and I would like to know, how i can get text, to go to the screen using a simple command, hopefully something like GLcout << ("My text to go on screen", MaybeAColourSetting, SomesizeIhope, X-cordinate, Y-cordinate). I know im askin alot, but im so new to this, and this one thin wasn''t in the NeHe tutorials. LOL, thats what i been learning off of. So, i use the very first lesson in NeHe as my setting up if you need to know what my source looks like. TY
~~Johnathan~~LTM my new fad, know it, use it, love it, LAUGHING TO MYSELF
MrP
MrP
NeHe''s tutorials 13, 14 and 15 show you how to dispaly font, although I''m afraid there isn''t any simple OpenGL command it still isn''t very difficult if you follow the tutorials.
Ilici
Ilici
its harder than u think
there are 2 ways: the slow way, and the fast way
i'll explain the fast way : use polygons for the letters and use a font texture

here is my console code:

    

struct tFont
{
char name[64];
CTexture tex;
int height;
};

tFont fonts[2];
int numFonts = 0;
int curFont = 0;

float textX, textY;
float fontColor[4];

void conSetColor(float r, float g, float b, float a)
{
fontColor[0] = r;
fontColor[1] = g;
fontColor[2] = b;
fontColor[3] = a;
}

void conCreateFont(LPSTR strFontName, int height)
{

char bmpName[255];

FILE *fi = fopen(strFontName, "rt");

fscanf(fi, "%s", fonts[numFonts].name);
fscanf(fi, "%s", bmpName);

fclose(fi);

fonts[numFonts].tex.LoadFromFile(bmpName);
fonts[numFonts].height = height;

numFonts++;
}

void conSelectFont(int i)
{
curFont = i;
}

void conDrawChar(unsigned char c, int x, int y )
{

float cPosX, cPosY;

float fontSZ = fonts[curFont].height;
float texSz = fonts[curFont].tex.GetWidth();

float origX = 0;
float origY = 0;
float sizeX = texSz / 16;
float sizeY = texSz / 16;

y = y + (texSz / 16);

cPosX = (c % 16) * (texSz / 16);
cPosY = (c / 16) * (texSz / 16);

CVector2 tl, tr, bl, br;

tl.x = (cPosX + origX) / texSz;
tl.y = (cPosY + origY) / texSz;

tr.x = (cPosX + origX + sizeX) / texSz;
tr.y = (cPosY + origY) / texSz;

br.x = (cPosX + origX + sizeX) / texSz;
br.y = (cPosY + origY + sizeY) / texSz;

bl.x = (cPosX + origX) / texSz;
bl.y = (cPosY + origY + sizeY) / texSz;

textX += fontSZ + FONT_SPACE;

glBegin(GL_QUADS);
glTexCoord2f(bl.x, bl.y);
glVertex2f(x, y );

glTexCoord2f(br.x, br.y);
glVertex2f(x + fontSZ, y );

glTexCoord2f(tr.x, tr.y);
glVertex2f(x + fontSZ, y - fontSZ);

glTexCoord2f(tl.x, tl.y);
glVertex2f(x, y - fontSZ);
glEnd();

}


void conTextOut(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);

textX = x - strlen(strString) * fonts[curFont].height / 2;

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

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

gluOrtho2D(0, curConfig.scrWidth, curConfig.scrHeight, 0);

glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);

glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glAlphaFunc(GL_GREATER, 0.0f);

glBindTexture(GL_TEXTURE_2D, fonts[curFont].tex.texnum);
glColor4fv(fontColor);

int i = 0;
while (strText[i++] != 0)
{
conDrawChar(strText[i - 1], textX, y);
}

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);

glPopMatrix();
glMatrixMode( GL_MODELVIEW );
glPopMatrix();

}


a font file contains the font name and the path to the font image
remeber to flip the font image vertically or change the code (i was 2 lazy to 2 it myself)



[edited by - Ilici on April 18, 2003 2:40:57 PM]
AN_D_K
AN_D_K
Glut has a number of functions that allows you to display text in your OpenGL windows. The fonts aren''t that brilliant though so most people tend to store each letter as a texture and use them.

http://www.gametutorials.com had a tutorial on this subject. Try that.
Surg AKA Kunark
Surg AKA Kunark
Hi, the newb is back, lol, Ok i got text to work, now say i want to add more lines of text, after the screen is full, how do i reset the screen. So i can add some more. Also i would like to know how i can make like a timer, so that it shows the startup screen for a certain amount of time, then shows the text.
~~Johnathan~~LTM my new fad, know it, use it, love it, LAUGHING TO MYSELF

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.