Page principale | Hiérarchie des classes | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

affichage_font.cpp

Aller à la documentation de ce fichier.
00001 00002 // Shoot(r) 00009 00010 #include "affichage_font.h" 00011 #include "ctrl_fenetre.h" 00012 #include "../lib/gtl/include/gtl.h" 00013 00014 CFont::CFont () 00015 { 00016 m_fCouleur [0] = 1; 00017 m_fCouleur [1] = 1; 00018 m_fCouleur [2] = 1; 00019 } 00020 00021 CFont::~CFont () 00022 { 00023 00024 } 00025 00026 void CFont::Couleur (float r, float g, float b) 00027 { 00028 m_fCouleur [0] = r; 00029 m_fCouleur [1] = g; 00030 m_fCouleur [2] = b; 00031 } 00032 00033 // La fonction Print s'utilise comme printf sauf que l'on indique la position où doit s'afficher le texte. 00034 void CFont::Print (EFontPosition FontPosition, const char *szMsg, ...) 00035 { 00036 char szText[256]; 00037 va_list ap; 00038 00039 // Pour cela, strlen recherche compte les caractères jusqu'au caractère '\0' 00040 memset (szText, '\0', 256); 00041 00042 if (szMsg == 0) 00043 return; 00044 00045 // Analyse la chaîne formaté et place le résultat dans szText 00046 va_start (ap, szMsg); 00047 vsprintf (szText, szMsg, ap); 00048 va_end (ap); 00049 00050 // Détermine la longueur de chaîne contenu dans szText 00051 // Pour cela, strlen recherche compte les caractères jusqu'au caractère '\0' 00052 int iLongeur = strlen (szMsg); 00053 00054 // On active l'utilisation des textures. 00055 glEnable (GL_TEXTURE_2D); 00056 // On active la transparence. 00057 glEnable (GL_BLEND); 00058 // On définie le mode de transparence, la transparence est réalisée par la couche alpha. 00059 glBlendFunc (GL_SRC_ALPHA, GL_ONE); 00060 00061 // Indique la couleur d'affichage des fonts 00062 glColor3fv (m_fCouleur); 00063 glPushMatrix (); 00064 glLoadIdentity (); 00065 switch (FontPosition) 00066 { 00067 default: 00068 case FONT_POSITION_CENTRE: 00069 glTranslated (FENETRE_LARGEUR / 2 - iLongeur * 12 / 2, FENETRE_HAUTEUR / 2, 0); 00070 break; 00071 case FONT_POSITION_CENTRE_HAUT: 00072 glTranslated (FENETRE_LARGEUR / 2 - iLongeur * 12 / 2, FENETRE_HAUTEUR - 16, 0); 00073 break; 00074 } 00075 glListBase (m_uiDisplayList); 00076 00077 // Exécute chaque liste d'affichages, chaque charactère étant l'identifiant d'une liste d'affichages. 00078 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText); 00079 glPopMatrix (); 00080 00081 // On deactive la transparence 00082 glDisable (GL_BLEND); 00083 // On deactive l'utilisation des textures. 00084 glDisable (GL_TEXTURE_2D); 00085 } 00086 00087 // La fonction Print s'utilise comme printf sauf que l'on indique la position où doit s'afficher le texte. 00088 void CFont::Print (EFontPosition FontPosition, int y, const char *szMsg, ...) 00089 { 00090 char szText[256]; 00091 va_list ap; 00092 00093 memset (szText, '\0', 256); 00094 00095 if (szMsg == 0) 00096 return; 00097 00098 // Analyse la chaîne formaté et place le résultat dans szText. 00099 va_start (ap, szMsg); 00100 vsprintf (szText, szMsg, ap); 00101 va_end (ap); 00102 00103 // Détermine la longueur de la chaîne contenu dans szText. 00104 // Pour cela, strlen recherche compte les caractères jusqu'au caractère '\0' 00105 int iLongeur = strlen (szMsg); 00106 00107 // On active l'utilisation des textures. 00108 glEnable (GL_TEXTURE_2D); 00109 // On active la transparence. 00110 glEnable (GL_BLEND); 00111 // On définie le mode de transparence, la transparence est réalisée par la couche alpha. 00112 glBlendFunc (GL_SRC_ALPHA, GL_ONE); 00113 00114 glColor3fv (m_fCouleur); 00115 glPushMatrix (); 00116 glLoadIdentity (); 00117 switch (FontPosition) 00118 { 00119 default: 00120 case FONT_POSITION_CENTRE: 00121 glTranslated (FENETRE_LARGEUR / 2 - iLongeur * 12 / 2, y, 0); 00122 break; 00123 } 00124 glListBase (m_uiDisplayList); 00125 00126 // Exécute chaque liste d'affichages, chaque charactère étant l'identifiant d'une liste d'affichages. 00127 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText); 00128 glPopMatrix (); 00129 00130 // On deactive la transparence 00131 glDisable (GL_BLEND); 00132 // On deactive l'utilisation des textures. 00133 glDisable (GL_TEXTURE_2D); 00134 } 00135 00136 // La fonction Print s'utilise comme printf sauf que l'on indique la position où doit s'afficher le texte. 00137 void CFont::Print (int x, int y, const char *szMsg, ...) 00138 { 00139 char szText[256]; 00140 va_list ap; 00141 00142 memset (szText, '\0', 256); 00143 00144 if (szMsg == 0) 00145 return; 00146 00147 // Analyse la chaîne formaté et place le résultat dans szText 00148 va_start (ap, szMsg); 00149 vsprintf (szText, szMsg, ap); 00150 va_end (ap); 00151 00152 // On active l'utilisation des textures. 00153 glEnable (GL_TEXTURE_2D); 00154 // On active la transparence. 00155 glEnable (GL_BLEND); 00156 // On définie le mode de transparence, la transparence est réalisée par la couche alpha. 00157 glBlendFunc (GL_SRC_ALPHA, GL_ONE); 00158 00159 glColor3fv (m_fCouleur); 00160 glPushMatrix (); 00161 glLoadIdentity (); 00162 glTranslated (x, y, 0); 00163 glListBase (m_uiDisplayList); 00164 00165 // Exécute chaque liste d'affichages, chaque charactère étant l'identifiant d'une liste d'affichages. 00166 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText); 00167 glPopMatrix (); 00168 00169 // On deactive la transparence 00170 glDisable (GL_BLEND); 00171 // On deactive l'utilisation des textures. 00172 glDisable (GL_TEXTURE_2D); 00173 } 00174 00175 void CFont::ChargerTexture (const char* szTexture) 00176 { 00177 gtl::CImageTGA Image (szTexture); 00178 int iLargeur = Image.GetSizeX (); 00179 int iHauteur = Image.GetSizeY (); 00180 00181 // Chargement d'une texture. 00182 // On créé un objet de texture qui est identifié par m_uiTexture. 00183 glGenTextures (1, &m_uiTexture); 00184 // Indique que l'on utilise l'objet de texture identifié par m_uiTexture. 00185 glBindTexture (GL_TEXTURE_2D, m_uiTexture); 00186 // Paramétrage de l'objet de texture, on utilise un filtre linéaire. 00187 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 00188 // Paramétrage de l'objet de texture, on utilise un filtre linéaire. 00189 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 00190 // Chargement des données de la texture. OpenGL copie en mémoire les données. 00191 glTexImage2D (GL_TEXTURE_2D, 0, 3, Image.GetSizeX (), Image.GetSizeY (), 0, GL_BGR, GL_UNSIGNED_BYTE, Image.GetData ()); 00192 00193 // On créé 256 display lists, une par caractère. 00194 m_uiDisplayList = glGenLists (256); 00195 for (int i = 0; i < 256; i++) 00196 { 00197 float fTexCoordX = float (i%16) / 16.0f; 00198 float fTexCoordY = float (i/16) / 16.0f; 00199 00200 // Indique le contenu des listes d'affichages 00201 glNewList (m_uiDisplayList + i, GL_COMPILE); 00202 // Liste des commandes qui seront exécutés par la liste d'affichage 00203 00204 // Indique la texture que l'on souhait utiliser 00205 glBindTexture (GL_TEXTURE_2D, m_uiTexture); 00206 // Affiche un quadrangle comme fragment de la texture c'est à dire restreint à un caractère 00207 glBegin (GL_QUADS); 00208 // Indique les coordonnées de la texture pour le vertex bas gauche 00209 glTexCoord2f (fTexCoordX, 1.0f - fTexCoordY - 0.0625f); 00210 glVertex2f (0, 0); 00211 00212 // Indique les coordonnées de la texture pour le vertex bas droit 00213 glTexCoord2f (fTexCoordX + 0.0625f, 1.0f - fTexCoordY - 0.0625f); // (0.0625 = 1 / 16) 00214 glVertex2f (iLargeur / 16.f, 0); 00215 00216 // Indique les coordonnées de la texture pour le vertex haut droit 00217 glTexCoord2f (fTexCoordX + 0.0625f, 1.0f - fTexCoordY); 00218 glVertex2f (iLargeur / 16.f, iHauteur / 16.f); 00219 00220 // Indique les coordonnées de la texture pour le vertex haut gauche 00221 glTexCoord2f (fTexCoordX, 1.0f - fTexCoordY); 00222 glVertex2f (0, iHauteur / 16.f); 00223 glEnd (); 00224 glTranslated (12.f, 0, 0); 00225 glEndList (); 00226 } 00227 }

Généré le Sun Sep 26 11:36:46 2004 pour Shoot(r) par doxygen 1.3.8