begin process at 2008 08 08 21:43:01
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DU TEXTE SUR UNE TEXTURE OPENGL


Information sur la source

Catégorie :OpenGL Classé sous : texture, texte, opengl, win32 Niveau : Initié Date de création : 02/07/2005 Vu / téléchargé: 3 914 / 415

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Attention code non portable, win32 uniquement. si quelqu'un sait le porter a Linux (au minimum) je suis preneur, je n'attends que ca

ce code sert a créer une texture openGL avec du texte dessus...atention contrairement a certains codes existantson ne fait pas un copier-coller de caracreres venant d'une texture de 1Mo sur le disque. tout est créé dynamiquement, de maniere tres simple pour l'utilisateur.
le but, a terme,de toutes mes sources a venir, est d'éviter de charger a partir du disque le maximum de fichiers
cela se fera au détriment du temps de chargement, mais ca je m'en fiche (pour ce que je veux faire)

Conclusion

c'est sur ce code qu'est basé mes prochaines sources mais je peux pas encore les poster elles sont pas finies
ps: vous verrez je me suis pas foulé pour l'affichage ^^ le but était de montrer l'utilisation du .h
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de Taranael le 02/07/2005 14:00:04

    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

  • signaler à un administrateur
    Commentaire de NoRabbit le 02/07/2005 17:58:42

    sympa

  • signaler à un administrateur
    Commentaire de Arnaud16022 le 02/07/2005 19:53:43

    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

  • signaler à un administrateur
    Commentaire de T_Mehdi le 02/07/2005 19:53:59

    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

  • signaler à un administrateur
    Commentaire de Arnaud16022 le 02/07/2005 20:43:16

    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

  • signaler à un administrateur
    Commentaire de T_Mehdi le 02/07/2005 21:37:15

    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é^^)

  • signaler à un administrateur
    Commentaire de kortin le 04/07/2005 09:24:54

    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.            

  • signaler à un administrateur
    Commentaire de Arnaud16022 le 04/07/2005 13:35:19

    wow !
    vi effectivement ^^ c'est un peu bourrin je trouve ^^

  • signaler à un administrateur
    Commentaire de T_Mehdi le 04/07/2005 15:11:24

    mdr :D,la variable a_data conteint les donné d'une image bmp ^^ donc ca revien au meme.

  • signaler à un administrateur
    Commentaire de kortin le 06/07/2005 09:19:16

    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 ?

  • signaler à un administrateur
    Commentaire de Arnaud16022 le 06/07/2005 11:05:58

    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.
    ++

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS