CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

opengl et 2d

godrik
godrik
Niveau 30
12 janvier 2012 à 15:29:03

merci les gars pour ces informations, j'irai jetter un oeil.

J'ai vu les explications de nehe sur les fonts. Mais du code pas portable pour un OS que je n'utilise pas n'est pas si utile que ca. (Quoi que ca m'a permi de trouver des version a partir de glx.) Si c'est trop complique, je passerais peut etre par cairo pour generer une texture du texte, mais c'est un peu bourin quand meme.

Pour les textures, j'hesite entre ecrire un convertisseur base sur libpng ou bien change le format des image sur le disque directement. Aucune des deux solutions ne m'a vraiment l'air satisfaisante. (Ecrire de la libpng a l'air assez fatiguant...)

Paulop
Paulop
Niveau 12
12 janvier 2012 à 15:36:48

Pour les textures j'utilise stb_image.

Pseudo supprimé
Pseudo supprimé 12 janvier 2012 à 16:09:23

Oui, stb_image qui est une petite lib, c'est pas mal non plus! Pratique pour les petits jeux ou démos.

@godrik: C'est pas compliqué de porter le code de NeHe sur un autre os pour afficher du texte avec les display list. Pourvu que l'OS de destination possède une version d'OpenGL avec le pipeline fixe.

Ce n'est pas portable en l'état, mais le code OpenGL lui l'est, et heureusement :) Tu peux donc t'inspirer de son code pour écrire le tiens, en ce qui concerne l'affichage de texte via display list.

pilo1488
pilo1488
Niveau 10
12 janvier 2012 à 16:09:55

"Pour les textures j'utilise stb_image."
Bah je l'avais pas vu celui la! J'utilise http://nothings.org/stb/stb_truetype.h pour les font, et c'est 100% portable ca godrik (sans modif).

godrik
godrik
Niveau 30
12 janvier 2012 à 16:17:31

ca a l'air d'etre de la bonne tout ca! J'essayerait ce soir. Merci a vous.

Lapintade
Lapintade
Niveau 30
12 janvier 2012 à 17:58:57

Perso pour les texture j'ai pris l'habitude d'utiliser du TGA. C'est un format d'image non compressé. Le code pour relire du TGA prendrs 5 lignes. C'est tout simple. Il faut cependant utiliser de bon logiciels pour creer de bons TGA (c'est un peu de sport pour faire des TGA 32 bits avec transparence).
Sinon LibPng, ca doit se recompiler facilement. Je crois que ca utiliser la libZ (zip), qui se compile nickel et qui est ensuie bien utile pour charger des données compressées.

Pour les font, j'utilise le logiciel gratuit "Bitmap Font Generator". Il te génère un fichier graphique et un fichier de description des caractères (texte ou binaire). Évidement ensuite, il n'y a pas de code pour que ca fonctionne directement dans ton jeu. C'est un peu de boulot pour écrire un gestionnaire de fontes, mais pas compliqué non plus. Ca sert tout le temps ensuite.

godrik
godrik
Niveau 30
22 janvier 2012 à 20:46:56

des nouvelles du front,

grace a vos conseils, j'ai pu mettre en place une version de mon jeu qui utilise opengl. J'ai utilise la lib stb_image pour charge mes sprites en PNG avec canaux alpha. Ca m'a pris un peu de temps de comprendre comment faire fonctionner la transparence comme il faut. En effet, j'utilise un fall-back a base de couleur fixe pour les objets non texture et ca changait la couleur des objets texture.

Le programme est maintenant BEAUCOUP plus rapide qu'avant. J'avais du mal a tirer 40 FPS quand j'utilisais cairo, maintenant je crois que je n'ai jamais vu en dessous de 100 FPS.

Je compte me pencher sur les font maintenant. Une fois que ca sera fait, je posterai peut etre une demo histoire d'avoir des retours.

Merci a vous.

Erik

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 14:41:07

http://pastebin.com/GkCbdEig et http://pastebin.com/Y9cdskys pour la création d'une classe qui dessine du texte avec la methode des displaylist (na pas oublier de binder la bonne texture avant d'éssayer d'afficher du texte..., et ya encore moyen d'optimiser).

Une version, qui utilise les api window il me semble, que j'avais écrit en // mais qui ce révéle 1000 fois moins rapide :)
http://pastebin.com/1ATBFkMz et http://pastebin.com/bDx0nQfg

En éspérent que cela te soit utile. Bye

pilo1488
pilo1488
Niveau 10
23 janvier 2012 à 14:48:31

et y'a un gain de perf a faire une liste de 2 triangles?!??

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 14:51:11
  • edit

Je n'ai pas fais gaffe si la version "Bitmap" était la dernière version de ma classe (il me semble que non, la dernière version pouvant prendre les %i, %s, et autres, à la manière des printf), j'ai pris ça dans mes anciens codes sources. Depuis, j'ai écrit d'autres classe mais là c'étais pour te donner une idée.

En gros, aTextureSize est la largeur de la texture représentant le texte (texture carré), aCharWidth et aCharHeight c'est la hauteur et largeur des caractères, aMargeOffset est le nombre de pixel servant de "marge" pour CHAQUE caractères (tu comprendra en testant ou adaptant).

Pour créer les texture de font, j'utilise LMNOPC Font builder. Je met la texture en 256x256 ou 512x512, un seul jeux de caractères. Genre, ça donne des images de ce genre:
http://imageshack.us/f/710/fontmegatron.png (attention, on ne vois rien, mais ajoutez un fond noire et vous verrez mieux ;))

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 14:52:41

@Pilo1488 :

Bof, pas vraiment :) Tu peux même faire plus rapide en ne dessinant qu'un seul triangle, puisque un carré tiens dans un triangle, tu peux afficher un sprite avec 1 seul triangles. Mais franchement, c'est du chipotage

pilo1488
pilo1488
Niveau 10
23 janvier 2012 à 15:06:39

non c'est pas ce que je voulais dire :) Une liste de 1 triangle ca doit etre la meme chose.
C'est que la liste est a peu près vide (et donc ne sert a rien?)

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 15:16:32

La liste est vide? Comment ça, j'ai du mal à te comprendre oO

Ahhh ok je viens de comprendre! Alors oui elles ne contiennent que 1 quad chacune, c'est ça qui te gêne? Mais c'est pas grave du tout ça.

Seulement, quand on fait

glListBase(this->listBase);
glCallLists(strlen(aText), GL_UNSIGNED_BYTE, aText);

On dit à OpenGL de parcourir notre chaîne de caractères et d'appeler chaque char qui correspond dans la liste. l'ASCII allant de 0 à 255, on est tout bon, et on affiche du texte rapidement.

Par contre, je ne l'ai pas précisé, mais il faut utiliser une vue orthogonale (2d) pour utiliser cette classe.

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 20:17:38

Attention ya un méchant bug dansla version qui utilise l'api de windows.
c'est au niveau du glNewList (ligne 15) et glDeleteList (Ligne 40). Si vous ne voyez pas le pb, :sors:

Au cas ou vous voudriez faire des benchmark, c'est bon à savoir, ce petit problème qui pourrais tout faire planter :)

Je n'utilise plus la class WindowsFont car vraiment trop lente. La class BitmapFont est plus rapide que les glutPrint (ou l'équivalent, je ne sais plus :p). Je l'utilise encore dans mes projets/test de demos en 64k.

Dernièrement j'ai aussi codé une nouvelle classe qui me permet d'afficher du texte static (donc pas genre printf avec %i %s et tous), mais de manière méga rapide ! Avec un peu de travail, elle est grandement améliorable.

Le truc c'est que je précompile des string, et j'ajoute tout dans un VBO, je store l'indice de début et de fin en // pour sélectionner quelle string afficher. Ça prend en compte les retour à la ligne "\n" et les espace. Mais on peux aller plus loin en parsant le texte pour modifier la couleur des lettre, la position, un peux comme du html. Mais bon, faut encore que je travail sur la source (ça va me servir pour la prochaine démo). Et c'est pas une méthode extra ordinaire, il y à peut être mieu/plus flexible, mais c'est super rapide. (6 call à l'api pour afficher n'importe quel quantité de texte je crois).

Si vous voulez, je peux vous filer le code. Ya tout un petit framework derrière (pour gérer les VBO, Texture etc), mais le principe est là, la logique aussi, ça ne devrais pas vous poser de problèmes. Je suis curieux de voire vos codes aussi, comment vous faites et tout.

caelacanthe
caelacanthe
Niveau 10
23 janvier 2012 à 20:52:34

"Je n'utilise plus la class WindowsFont car vraiment trop lente. La class BitmapFont est plus rapide que les glutPrint (ou l'équivalent, je ne sais plus :p). Je l'utilise encore dans mes projets/test de demos en 64k."

:d) j'ai un projet dans lequel j'affiche des sprites avec des lettres dessinées dessus. :hap:

pour l'instant, elles sont moches, mais c'est supposé permettre de donner une identité graphique plus remarquable au soft, qu'une simple fonte vectorielle appliquée sur une texture ne pourrait pas forcément fournir. cette voie-là est envisageable, aussi. :(

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 21:11:53

Je ne vois pas ou tu veux en venir? En faite, j'ai pas du tout compris ton message :desole:

Si tu veux dire qu'une texture de font toute simple c'est moche, celle-ci sont plus sympas et toutafait utilisable aussi (faut les modifier un petit peu, ou mieu: adapter le code): http://cgi.algonet.se/htbin/cgiwrap?user=guld1&script=fonts.pl

caelacanthe
caelacanthe
Niveau 10
23 janvier 2012 à 21:32:58

oui, je parlais de ça. une fonte dessinée et pas générée automatiquement. :oui:

Pseudo supprimé
Pseudo supprimé 23 janvier 2012 à 22:03:22

En fait on dis la même chose :) Peux importe l'image, tant que les glyphes sont là.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment