Advertisement

FONT - lisson 13 with code

Started by October 23, 2011 10:51 AM
0 comments, last by ifthen 13 years ago
Hello, i have a problem in my code, i show you a little part :
I'm using code block, and i really don't know what is wrong. Arial.ttf is with the .exe and the sources..


#include <windows.h>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <SDL/SDL_ttf.h>

GLuint Nom ;
GLuint base; // Base Display List For The Font Set
HDC hDC=NULL; // Private GDI Device Context
GLfloat cnt1; // 1st Counter Used To Move Text & For Coloring
GLfloat cnt2; // 2nd Counter Used To Move Text & For Coloring


void KillFont() {
glDeleteLists(base, 96); // Delete All 96 Characters
}

void BuildFont(){
HFONT font; // Windows Font ID
HFONT oldfont; // Used For Good House Keeping
base= glGenLists(96); // Storage For 96 Characters

font= CreateFont(-24,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"arial");

oldfont = (HFONT)SelectObject(hDC, font); // Selects The Font We Want
wglUseFontBitmaps(hDC, 32, 96, base); // Builds 96 Characters Starting At Character 32
SelectObject(hDC, oldfont); // Selects The Font We Want
DeleteObject(font); // Delete The Font
}

void glPrint(const char *fmt, ...){
char text[256]; // Holds Our String
va_list ap; // Pointer To List Of Arguments

if (fmt == NULL) // If There's No Text
return; // Do Nothing

va_start(ap, fmt); // Parses The String For Variables
vsprintf(text, fmt, ap); // And Converts Symbols To Actual Numbers
va_end(ap); // Results Are Stored In Text

glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
glListBase(base - 32); // Sets The Base Character to 32
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
glPopAttrib(); // Pops The Display List Bits
}

int initialisation(){

glViewport(0,0,640,480); // Reset The Current Viewport

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix

gluPerspective(80,640/480,0.0001f,100.0f);

glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity();

glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations

BuildFont();
return 0;
}




int DrawGLScene(){printf("draw\n");
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity(); // Reset The Current Modelview Matrix
glTranslatef(0.0f,0.0f,-1.0f); // Move One Unit Into The Screen
// Pulsing Colors Based On Text Position
glColor3f(1.0f,1.0f,1.0f);
// Position The Text On The Screen
glRasterPos2f(-0.45f+0.05f*(float)(cos(cnt1)), 0.32f*(float)(sin(cnt2)));
glPrint("Active OpenGL Text With NeHe - %7.2f", cnt1); // Print GL Text To The Screen
cnt1+=0.051f; // Increase The First Counter
cnt2+=0.005f; // Increase The First Counter
return TRUE; // Everything Went OK
}


/// ********************************************************************************************MAIN
int main(int argc, char *argv[]){

SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetCaption("Gestion des palettes",NULL);
/*ecran =*/ SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
SDL_EnableKeyRepeat(10,10);

bool continuer = true;
SDL_Event event;
initialisation();
while (continuer){

//Draw_3D();
//Draw_2D();
DrawGLScene();
SDL_WaitEvent(&event);
switch(event.type){
case SDL_QUIT:
break;
case SDL_KEYUP:
switch (event.key.keysym.sym){
case SDLK_ESCAPE:
letsexit = 1; printf("évènement SDL: QUITTER\n"); exit(0);
break;
case SDLK_1:
caisse1 = 1;
//create_palette(1);
printf("évènement SDL: ajouter une caisse en 1 \n");
break;
case SDLK_2:
caisse2 = 1;
//create_palette(2);
printf("évènement SDL: ajouter une caisse en 2 \n");
break;
case SDLK_3:
caisse3 = 1;
//create_palette(3);
printf("évènement SDL: ajouter une caisse en 3\n");
break;
case SDLK_r: printf("reset\n");
reset = 1;
break;
default:
break;
}
}


SDL_GL_SwapBuffers();
}

//TTF_CloseFont(police);
TTF_Quit();
SDL_Quit(); /// arrêt de la SDL
return 0;
}
What is the problem? We really cannot help you without a detailed description of it.

This topic is closed to new replies.

Advertisement