DU TEXTE SUR UNE TEXTURE OPENGL

Taranael Messages postés 54 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 21 juin 2007 - 2 juil. 2005 à 14:00
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 6 juil. 2005 à 11:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32475-du-texte-sur-une-texture-opengl

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
6 juil. 2005 à 11:05
c'est faisable de toute facon, comment crois-tu que les OSes font?
c'est valable pour tous les OSes qui supportent le .ttf: pour Windows, UNIX je suis sur que c'est implémenté par défault , pour Mac aucune idée
de plus ya une lib, freetype2, qui fait ca , de maniere portable en plus, mais j'ai pas réussi a la faire marcher sinon je l'aurai utilisée.
++
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
6 juil. 2005 à 09:19
Je me demande si il est possible de creer une serie de fonctions qui affichent du texte à partir des fichiers .ttf contenu dans c:\winnt.
Je pense que ce serait faisable sous windows. Par contre sous linux, je ne sais pas comment ça se passe. J'aimerai bien être fixé pour savoir si ça vaut le coup d'essayer. Quelqu'un est au courant ?
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
4 juil. 2005 à 15:11
mdr :D,la variable a_data conteint les donné d'une image bmp ^^ donc ca revien au meme.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
4 juil. 2005 à 13:35
wow !
vi effectivement ^^ c'est un peu bourrin je trouve ^^
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
4 juil. 2005 à 09:24
Pour l'instant, j'ai vu un seul projet qui affiche du texte sans bitmap. Vous pouvez le trouvez le trouver dans glut : glut\progs\demos\ideas

Là, c'est spécial, il y a en fait la définition de chaque lettre.
exemple, la lettre a:

#include <GL/glut.h>

static float a_data[][2] = {
{5.618949, 10.261048},
{5.322348, 9.438848},
{5.124614, 10.030832},
{4.860968, 9.488181},
{4.811534, 9.932169},
{3.938208, 9.438848},
{3.658084, 9.685509},
{2.784758, 8.994862},
{2.801236, 9.175745},
{1.960865, 8.172662},
{1.186406, 7.761562},
{1.252317, 6.561151},
{0.576725, 6.610483},
{0.939238, 5.525180},
{0.164779, 4.883864},
{0.840371, 4.818089},
{0.230690, 3.963001},
{0.939238, 4.242549},
{0.609681, 3.255909},
{1.268795, 3.963001},
{1.021627, 3.075026},
{1.861998, 4.045221},
{1.829042, 3.535457},
{2.817714, 4.818089},
{3.163749, 4.998972},
{3.971164, 6.643371},
{4.267765, 6.725591},
{4.663234, 7.630010},

{5.404737, 9.734840},
{4.646756, 9.669065},
{5.108136, 8.731757},
{4.679712, 8.600205},
{4.926879, 7.564234},
{4.366632, 6.692703},
{4.663234, 5.344296},
{3.888774, 4.850976},
{4.630278, 4.094553},
{3.954686, 3.963001},
{4.828012, 3.798561},
{4.168898, 3.321686},
{5.157569, 3.864337},
{4.514933, 3.091470},
{5.553038, 4.045221},
{5.305870, 3.634121},
{5.932029, 4.176773},

};

void draw_a(void) {

glBegin(GL_TRIANGLE_STRIP);
glVertex2fv(a_data[0]);
glVertex2fv(a_data[1]);
glVertex2fv(a_data[2]);
glVertex2fv(a_data[3]);
glVertex2fv(a_data[4]);
glVertex2fv(a_data[5]);
glVertex2fv(a_data[6]);
glVertex2fv(a_data[7]);
glVertex2fv(a_data[8]);
glVertex2fv(a_data[9]);
glVertex2fv(a_data[10]);
glVertex2fv(a_data[11]);
glVertex2fv(a_data[12]);
glVertex2fv(a_data[13]);
glVertex2fv(a_data[14]);
glVertex2fv(a_data[15]);
glVertex2fv(a_data[16]);
glVertex2fv(a_data[17]);
glVertex2fv(a_data[18]);
glVertex2fv(a_data[19]);
glVertex2fv(a_data[20]);
glVertex2fv(a_data[21]);
glVertex2fv(a_data[22]);
glVertex2fv(a_data[23]);
glVertex2fv(a_data[24]);
glVertex2fv(a_data[25]);
glVertex2fv(a_data[26]);
glVertex2fv(a_data[27]);
glEnd();

glBegin(GL_TRIANGLE_STRIP);
glVertex2fv(a_data[28]);
glVertex2fv(a_data[29]);
glVertex2fv(a_data[30]);
glVertex2fv(a_data[31]);
glVertex2fv(a_data[32]);
glVertex2fv(a_data[33]);
glVertex2fv(a_data[34]);
glVertex2fv(a_data[35]);
glVertex2fv(a_data[36]);
glVertex2fv(a_data[37]);
glVertex2fv(a_data[38]);
glVertex2fv(a_data[39]);
glVertex2fv(a_data[40]);
glVertex2fv(a_data[41]);
glVertex2fv(a_data[42]);
glVertex2fv(a_data[43]);
glVertex2fv(a_data[44]);
glEnd();

glBegin(GL_LINE_STRIP);
glVertex2fv(a_data[0]);
glVertex2fv(a_data[2]);
glVertex2fv(a_data[4]);
glVertex2fv(a_data[6]);
glVertex2fv(a_data[8]);
glVertex2fv(a_data[10]);
glVertex2fv(a_data[12]);
glVertex2fv(a_data[14]);
glVertex2fv(a_data[16]);
glVertex2fv(a_data[18]);
glVertex2fv(a_data[20]);
glVertex2fv(a_data[22]);
glVertex2fv(a_data[24]);
glVertex2fv(a_data[26]);
glVertex2fv(a_data[27]);
glVertex2fv(a_data[25]);
glVertex2fv(a_data[23]);
glVertex2fv(a_data[21]);
glVertex2fv(a_data[19]);
glVertex2fv(a_data[17]);
glVertex2fv(a_data[15]);
glVertex2fv(a_data[13]);
glVertex2fv(a_data[11]);
glVertex2fv(a_data[9]);
glVertex2fv(a_data[7]);
glVertex2fv(a_data[5]);
glVertex2fv(a_data[3]);
glVertex2fv(a_data[1]);
glEnd();

glBegin(GL_LINE_STRIP);
glVertex2fv(a_data[28]);
glVertex2fv(a_data[30]);
glVertex2fv(a_data[32]);
glVertex2fv(a_data[34]);
glVertex2fv(a_data[36]);
glVertex2fv(a_data[38]);
glVertex2fv(a_data[40]);
glVertex2fv(a_data[42]);
glVertex2fv(a_data[44]);
glVertex2fv(a_data[43]);
glVertex2fv(a_data[41]);
glVertex2fv(a_data[39]);
glVertex2fv(a_data[37]);
glVertex2fv(a_data[35]);
glVertex2fv(a_data[33]);
glVertex2fv(a_data[31]);
glVertex2fv(a_data[29]);
glEnd();

}

Autant dire que ce n'est pas la meilleur façon de programmer ça.
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
2 juil. 2005 à 21:37
we c vraie j'ai juste copiez coller la classe pour l'affichage du texte donc (pour ce qui est du devil c vraie j'ai pas f attention je croyai que je lavait inseré^^)
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 juil. 2005 à 20:43
heu ...
^^
t'as pas tout compris la :D
1 -> je ne veux pas de Devil ni d'aucune autre lib de chargement
2 -> ton code n'a rien a voir avec Devil
3 -> ton code n'a rien a voir avec ce qui est pas portable
4 -> a peu de choses pres j'ai déja ce code
5 -> c'est d'ailleurs le code basique, que j'ai évité dans cette source, de Nehe, pour ce genre de chose, ce qui te ramene a la présentation de cette source
6 -> merci qd meme :D
++
ad
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
2 juil. 2005 à 19:53
Comme tu chercher un code 100% portable en voila un qui utilise la lib opengl+devil(pour le chargement des texture)

#ifndef _Text_H_
#define _Text_H_
extern ProWiz::MainApp* GAME;
extern bool STATE[10];
namespace ProWiz
{
namespace IO
{
class GuiText

{

UINT Tbase;
public :


int Font;

void BuildFont(int X_Axes=15, int Y_Axes=0,int SizeOfFont=20) // Creé notre list de caractaire depuis bmp
{
float cx;
float cy;

Tbase=glGenLists(256); // Creé 256 Display Lists
glBindTexture(GL_TEXTURE_2D,Font);
for (UINT loop=0; loop<256; loop++) // Boucle 256 (Lists)
{
cx=float(loop%16)/16.0f;// Position X du Caracter
cy=float(loop/16)/16.0f;// Position Y du Caracter

glNewList(Tbase+loop,GL_COMPILE);//Commence la creation de la list
glBegin(GL_QUADS); // Utilisé un Carré pour chaque caractaire
glTexCoord2f(cx,1-cy-0.0525f);
glVertex2i(0,0);
glTexCoord2f(cx+0.0625f,1-cy-0.0625f);
glVertex2i(SizeOfFont,0);
glTexCoord2f(cx+0.0625f,1-cy);
glVertex2i(SizeOfFont,SizeOfFont);
glTexCoord2f(cx,1-cy);
glVertex2i(0,SizeOfFont);
glEnd();// Terminé le dessin du carré
glTranslated(X_Axes,Y_Axes,0);//Espace entre chaque caractére
glEndList();// Terminé le dessin de la list
}
}

void KillFont(GLvoid)
{
glDeleteLists(Tbase,256); // Efface les 256 lists
}

void PrintText(PWI_Point2D Position, char *String, PW_Color4 Color,bool Blood,bool Transparent=false)
{
glBindTexture(GL_TEXTURE_2D,Font);// applique Texture de font

glTranslated(Position.X,Position.Y,0);// Position le Texte
glListBase(Tbase-32+(128*Blood));//Choix du Fonts Normal->0 Gras->1


if (Transparent==true)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
}
Color.SetColor();

glCallLists(strlen(String),GL_BYTE,String); // Ecrire le texte

if(STATE[ProWiz::State::BLENDING]==false)glDisable(GL_BLEND);

}


};

}
}
#endif
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 juil. 2005 à 19:53
qu'est-ce qu'il a la nom de la fenetre? je vais qd meme pas m'embeter a retaper tout le basecode chaque fois! celui de NeHe est pas mal fait du tout et comme ya un wizard pour VC6 en 2 clics le projet est créé!
++
ad
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
2 juil. 2005 à 17:58
sympa
Taranael Messages postés 54 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 21 juin 2007 1
2 juil. 2005 à 14:00
Pour ce qui est de la source j'ai pas encore jeté un oeil mais en regardant la capture d'écran j'ai pas pu m'empêcher de rire en voyant le nom de la fenêtre :D
Je vais aller jeter un oeil dans le code voir si c'est de mon niveau parce que pour la qualité je me fais pas trop de soucis :D
++ Taranael
Rejoignez-nous