Listes OpenGL : Problème de texture

smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005 - 15 juin 2005 à 13:50
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 16 juin 2005 à 19:38
Bonjour,



Je travaille actuellement sur un projet en opengl. Pour des raisons de performence je me suis ecrit une classe qui crée du texte

a partir d'une texture TGA listant tous les caractères ASCII, j'utilise pour cela des listes d'affichage opengl.



(je vous passe les details de la création d'une liste, je n'ai pas de problème a ce niveau la)

Voila simplement la fonction qui me permet d'affichée une chaine de caractere dont j'ai déja crée les listes:





// dessine le texte

void CGLFont::DrawFontTexte()

{

glDisable(GL_LIGHTING);



// selectionne la texture des caracteres

glBindTexture(GL_TEXTURE_2D,GLFontID);



// pour utiliser ls listes opengl

glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);



// la liste des points

glBindBufferARB(GL_ARRAY_BUFFER_ARB,IDVertices);

glVertexPointer(2,GL_FLOAT,0,(char*)NULL);

// la liste des coordonnées de texture

glBindBufferARB(GL_ARRAY_BUFFER_ARB,TextureListeID);

glTexCoordPointer(2,GL_FLOAT,0,(char*)NULL);



// enfin on dessine

glDrawArrays(GL_QUADS,0,strlen(Texte)*4);



glDisableClientState(GL_VERTEX_ARRAY);

glDisableClientState(GL_TEXTURE_COORD_ARRAY);



glEnable(GL_LIGHTING);

}



Je ne maitrise pas encore tres bien ce concept de liste, mais je ne
crois pas faire de boulette enorme dans cette fonction ^^ a vous de me
le dire :)



Mon probleme est le suivant : A partir du moment ou la fonction ci
dessus a été appelé une première fois, toutes les textures que je tente
d'affichées ensuite ne passe plus.



Voila ... je ne sais pas quoi vous dire d'autre ^^ . Si je n'ai pas été
assez precis n'hesitez pas pour me demander d'eclaircir mon problème !


Smoove

3 réponses

KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
15 juin 2005 à 19:41
Salut, ca fait quoi glBindBufferARB ?
Quand tu parles de listes, tu parles de listes d'ID de textures ou de DisplayList ?

Au sinon, (si j'ai bien compris) tu paux declarer une seule texture contenant les 256 caracteres a l'horizontale.
Ensuite tu introduis un decalage sur la coordonnée horizontale (s ou u comme tu veux) suivant le caractere de la chaine.

Je sais pas si j'ai ete tres clair...

KeniiyK
0
smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005
15 juin 2005 à 21:56
En fait, ma methode pour créer mes chaines de caractères a peu
d'importance ^^, j'ai juste voulu essayer d'expliquer en gros le
contexte dans lequel je me trouve lorsque je rencontre mon bug.



Malheureusement comme je l'ai dit je ne connais pas encore tres bien le
principe de liste d'affichage opengl, je ne connais d'ailleurs pas le
nom exact qu'on lui donne, mais voici le principe :



- On donne à opengl deux tableaux ( un tableau qui contient des
coordonnées de points et l'autre les coordonnées de textures
associées), ca je le fait dans une autre fonction que je n'ai pas
montré ici.



- Ensuite au moment de dessiner, on selectionne la liste voulue (comme
pour une texture, opengl m'a retourné un unsigned int identifiant
chaque liste que je crée : ici IDVertices pour la liste de points et
TextureListeID pour les coord de textures associées.


- Une fois la liste selectionnée,
glDrawArrays(GL_QUADS,0,strlen(Texte)*4); demande a opengl de dessiner
les strlen(Texte)*4 Coordonnées*2 a partir des tableaux que je
lui ai donné a la création de la liste



Voila pour le concept, c t peu etre pas necessaire d'entrer autant dans
les details , mais comme j'ai dit je sais pas comment ca s'appelle donc
autant etre sur qu'on parle de meme chose.



Toujours est il que mon probleme n'est a proprement parlé a ce sujet :
c seulement apres avoir utiliser cette methode de dessin ( qui
fonctionne tres bien au passage) que tout ce que je v dessiner ensuite
n'est plus texturé (les textures appliquées plus classiquement avec
glTexCoord2f( ) ). En gros si j'efface dans mon code, tout ce qui
fait appel a la fonction de dessin que j'ai donné au dessus, subitement
toutes autres textures que j'affichent reaparaissent.



On dirait qu'il y a un conflit entre les deux en somme, et je ne vois vraiment pas pourquoi :s



(oula un bon pavé ca dsl ^^ )




Smoove
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
16 juin 2005 à 19:38
Bah je sais pas... ou alors t'as un mauvais glDisable(GL_TEXURE_2D); mal placé :)

KeniiyK
0
Rejoignez-nous