Problème police openGl

Signaler
Messages postés
31
Date d'inscription
mardi 14 septembre 2004
Statut
Membre
Dernière intervention
3 juin 2008
-
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008
-
Bonjour,

J'utilise le code suivant pour créer une police avec OPenGL:

GLvoid BuildFont(GLvoid) // Build Our Bitmap Font
{
HFONT font; // Windows Font ID
HFONT oldfont;
//HWND g_hWnd;// Used For Good House Keeping
//hDC = GetDC(g_hWnd);


base = glGenLists(96); // Storage For 96 Characters


font = CreateFont( 44, // Height Of Font
60, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
FW_BOLD, // Font Weight
FALSE, // Italic
FALSE, // Underline
FALSE, // Strikeout
ANSI_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
"Courier New"); // Font Name


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

}

Le problème est que je n'utilise pas MFC donc il ne connait pas hDC ( il est également inutile de déclarer HDC hDC). Comment dois-je procéder pour éviter d'utiliser cette variable?
(je ne souhaite pas utiliser une fonction qui créer une police à partir d'une image)
Merci d'avance,
Guillaume

5 réponses

Messages postés
17
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
14 juin 2006

Salut,
Si tu es sous windows tu peux récupérer le HDC avec la fonction "wglGetCurrentDC".
Si tu utilise GLUT il y a des fonctions GLUT pour l'utilisation de police bitmap.
Sinon il te reste la possibilité de charger une police bitmap depuis un fichier ou de creer des polices à partir de texture, c'est indépendant du système utilisé et les polices à base de texture peuvent être assez jolies.
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Ou alors tu les declares a la "mano" : (comme moi...)

// caractere espace
GLubyte policeSpace[16]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

// caractere '.'
GLubyte policePoint[16]=
{
0x00,0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

// Lettre Majuscule A-Z
GLubyte policeLetters[26][16]=
{
{0x00,0x00,0x00,0xc3,0xc3,0xc3,0xc3,0xff,0xc3,0xc3,0xc3,0x66,0x3c,0x18,0x00,0x00},
{0x00,0x00,0x00,0xfe,0xc7,0xc3,0xc3,0xc7,0xfe,0xc7,0xc3,0xc3,0xc7,0xfe,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xe7,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe7,0x7e,0x00,0x00},
{0x00,0x00,0x00,0xfc,0xce,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc7,0xce,0xfc,0x00,0x00},
{0x00,0x00,0x00,0xff,0xc0,0xc0,0xc0,0xc0,0xfc,0xc0,0xc0,0xc0,0xc0,0xff,0x00,0x00},
{0x00,0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xfc,0xc0,0xc0,0xc0,0xff,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xe7,0xc3,0xc3,0xcf,0xc0,0xc0,0xc0,0xc0,0xe7,0x7e,0x00,0x00},
{0x00,0x00,0x00,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x00},
{0x00,0x00,0x00,0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00},
{0x00,0x00,0x00,0x7c,0xee,0xc6,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00},
{0x00,0x00,0x00,0xc3,0xc6,0xcc,0xd8,0xf0,0xe0,0xf0,0xd8,0xcc,0xc6,0xc3,0x00,0x00},
{0x00,0x00,0x00,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00},
{0x00,0x00,0x00,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xdb,0xff,0xff,0xe7,0xc3,0x00,0x00},
{0x00,0x00,0x00,0xc7,0xc7,0xcf,0xcf,0xdf,0xdb,0xfb,0xf3,0xf3,0xe3,0xe3,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe7,0x7e,0x00,0x00},
{0x00,0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xfe,0xc7,0xc3,0xc3,0xc7,0xfe,0x00,0x00},
{0x00,0x00,0x00,0x3f,0x6e,0xdf,0xdb,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x3c,0x00,0x00},
{0x00,0x00,0x00,0xc3,0xc6,0xcc,0xd8,0xf0,0xfe,0xc7,0xc3,0xc3,0xc7,0xfe,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xe7,0x03,0x03,0x07,0x7e,0xe0,0xc0,0xc0,0xe7,0x7e,0x00,0x00},
{0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x00},
{0x00,0x00,0x00,0x18,0x3c,0x3c,0x66,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x00},
{0x00,0x00,0x00,0xc3,0xe7,0xff,0xff,0xdb,0xdb,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x00},
{0x00,0x00,0x00,0xc3,0x66,0x66,0x3c,0x3c,0x18,0x3c,0x3c,0x66,0x66,0xc3,0x00,0x00},
{0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0x66,0xc3,0x00,0x00},
{0x00,0x00,0x00,0xff,0xc0,0xc0,0x60,0x30,0x7e,0x0c,0x06,0x03,0x03,0xff,0x00,0x00}
};

// 0-9
GLubyte policeNumbers[10][16]=
{
{0x00,0x00,0x00,0x3c,0x66,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x66,0x3c,0x00,0x00},
{0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x66,0x76,0x3e,0x1e,0x0e,0x06,0x00,0x00},
{0x00,0x00,0x00,0xff,0xff,0x70,0x38,0x1c,0x0e,0x06,0x03,0xc6,0x6c,0x38,0x00,0x00},
{0x00,0x00,0x00,0x3c,0x46,0x03,0x03,0x06,0x0e,0x02,0x03,0x63,0x36,0x1c,0x00,0x00},
{0x00,0x00,0x00,0x0c,0x0c,0x0c,0x7e,0x7e,0x6c,0x60,0x30,0x30,0x38,0x18,0x00,0x00},
{0x00,0x00,0x00,0x7c,0x7e,0x66,0x02,0x72,0x7e,0x6c,0x60,0x60,0x7e,0x7e,0x00,0x00},
{0x00,0x00,0x00,0x3c,0x7e,0x66,0x66,0x7c,0x7c,0x60,0x70,0x70,0x3e,0x3e,0x00,0x00},
{0x00,0x00,0x00,0x60,0x30,0x30,0x18,0x18,0x7e,0x0c,0x06,0x03,0xff,0xff,0x00,0x00},
{0x00,0x00,0x00,0x7e,0xc3,0x81,0xc3,0x42,0x7e,0x3c,0x42,0x42,0x7e,0x3c,0x00,0x00},
{0x00,0x00,0x00,0x7c,0x7c,0x0e,0x0e,0x06,0x3e,0x3e,0x66,0x66,0x7e,0x3c,0x00,0x00}
};
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ouah mais c'est quoi ca?

je fais un copier-coller, ca peut tje servir... mais tu l'utilise
comment ton machin? tu crée une texture a partir de tes donées?

_______________________


Omnia vincit labor improbus
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Oui tu peux aussi en faire une texture en alpha ou couleur ou couleur + alpha si tu veux.
Mais a la base ca sert plutot a afficher des bitmap via glBitmap();

exemple (en C) avec les displays lists :
void initializePolice()
{
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
/*GLuint */ policeDisplay=glGenLists(38); // 26 lettre + 10 chiffre + espace + point


for(i=0,j='A';i<26;i++,j++)
{
glNewList(policeDisplay+j,GL_COMPILE);
glBitmap(8,16,0.0,0.0,10.0,0.0,policeLetters[i]);
glEndList();
}


for(i=0,j='0';i<10;i++,j++)
{
glNewList(policeDisplay+j,GL_COMPILE);
glBitmap(8,16,0.0,0.0,10.0,0.0,policeNumbers[i]);
glEndList();
}


glNewList(policeDisplay+' ',GL_COMPILE);
glBitmap(8,16,0.0,0.0,10.0,0.0,policeSpace);
glEndList();


glNewList(policeDisplay+'.',GL_COMPILE);
glBitmap(8,16,0.0,0.0,10.0,0.0,policePoint);
glEndList();
}

void bitmapWriteString(char* s) //ecrit a la position de la trame courante (glRasterPos) la chaine s
{
glPushAttrib(GL_LIST_BIT);
glListBase(policeDisplay);
glCallLists(strlen(s),GL_UNSIGNED_BYTE,(GLubyte*)s);
glPopAttrib();
}

Fais bien attention à avoir policeDisplay,policeLetters,policeNumbers,policeSpace et policePoint déclaré en global si C ou via un malloc, un pointeur dessus (et peut etre une struct) si tu veux les definir dans une fonction, et si C++ tu te les mets en membre de classe (static const par exemple...). Et pour la couleur du texte glColor.
Le truc un peu chiant avec les glBitmap() c'est que tu ne peux pas les orientés (genre faire un texte defilant a la star wars, enfin si c'est possible pour cet exemple mais lourd a faire et a gerer, faudrait en fait faire une police "contenant la projection").
Donc tu peux aussi en faire une texture ALPHA et la bien sur, tu fais ce que tu veux....
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

Bonjour a tous !!!

Je sais que je suis vraiment en retard, (lol ca fait plus d'un an que vous avez posté) mais ce topic me concerne aussi car moi, je voudrais faire du texte en 3d avec glut, mais, en allant sur le site de Nehe, il utilise hdc et comme je suis sous glut, j'aimerais bien ne pas à avoir à utiliser cette variable.

Comment faire ?

Merci d'avance !