Est-il décent OpenGL texte de dessin de la bibliothèque pour le SDK de l'iPhone?
Je suis à essayer de comprendre un simple tirage de texte en OpenGL. Ma recherche a montré son assez complexe. Il s'agit de créer (ou de la génération à l'exécution) d'une police de l'atlas de texture, puis la création d'un quad pour chaque lettre avec juste le bon placement et de coordonnées de texture.
J'ai entendu de bonnes choses au sujet de freetype, mais ont trouvé très peu de choses sur la façon de l'obtenir en cours d'exécution sur l'iPhone, et il semble être assez complexe.
Donc, il y a tout Objective-C enveloppé OpenGL bibliothèque de texte qui fonctionne avec le SDK de l'iPhone que les gens ont été en utilisant? Ou suis-je un peu plus de cette pensée et il est plus facile d'approche que je suis absent?
Vous devez vous connecter pour publier un commentaire.
Votre description de l'utilisation de freetype pour créer une texture atlas ainsi que toutes les informations de glyphe est exactement ce que je fais dans mon actuel iPhone projet.
Je ne l'analyse de la police dans une pré-étape de processus (Tous en C# sur Windows que ça arrive). L'atlas lui-même est généré et contient uniquement les caractères nécessaires à couper vers le bas sur l'espace, j'ai aussi parfois finissent par générer plus d'un atlas de garder les textures tailles pow2 et du sage résolution.
Vous pouvez facilement retirer le glyphe de l'information à partir de freetype. Passer le long de votre application avec les textures à l'exécution, puis il est assez trivial de simplement modifier les coordonnées UV de la texture que nécessaire.
Pour ce que ça vaut, c'est la façon dont je définis un glyphe de caractère à l'intérieur de mon petit moteur:
J'ai ensuite un "SpriteString' objet, qui se comporte à peu près comme n'importe quelle autre chaîne, à part que je peux dessiner à l'aide de sprites....
Je suis d'accord tout cela peut sembler beaucoup de travail pour un trivial problème, mais j'ai trouvé cela me donne beaucoup de souplesse et n'a pas vraiment long à mettre en œuvre quand je suis descendu pour elle.
Hésitez pas à répondre ou commenter si vous avez besoin d'autres détails. (Et bonne chance 🙂
Répondre à votre commentaire que j'ai couru hors de la salle dans la section des commentaires...
Découvrez la freetype de la documentation, il vous donne essentiellement le glyphe de données sans vous embêter, c'est juste qu'il tire à droite en sortant de la police. Comme pour les textures elles-mêmes, vous obtenez freetype pour le rendu de chaque glyphe, puis gérer que pour créer de la texture. Ce que je fais en tant que pré-traiter entièrement séparée de mon application principale.
Voici un extrait de mon code outil qui fait cela: http://pastebin.com/md1c6354
Veuillez noter cependant, cela n'a été jamais prévu pour les yeux et non pour la consommation publique, donc excuse le fait que c'est salissant comme l'enfer 🙂
Une façon de le faire est par la mise en place d'un UILabel et puis il a rendu sa couche dans une texture. Une voie indirecte pour ce qui serait d'abord configurer le UILabel avec le texte, la police, etc. et puis utiliser le code suivant
pour capturer le UILabel à une UIImage. Vous pouvez ensuite utiliser la initWithImage: constructeur de la Texture2D classe dans le CrashLanding projet de transformer ce à une texture.
Il ressemble initWithImage: dans cet exemple re-rend le UIImage à une image contexte et l'utilise pour créer de la texture. Avec un peu de travail, vous pourrez extraire le code de la méthode et de modifier le code ci-dessus pour rendre votre couche directement dans la texture.
De cette façon, vous obtenez la belle Unicode et de la prise en charge des polices de UILabel lors de la création le texte de votre texture.
J'ai trouvé une solution simple à ce. Voici une petite fonction que j'ai écrit pour elle. (Vous aurez besoin de la Texture2D classe.)
Je crois que l'entrée de coordonnées doivent être, dans votre monde, coordonnées, mais je ne suis pas sûr si cela est vrai en général ou si c'est que pour moi. Vous pourriez avoir besoin de jouer avec les décalages pour obtenir la droite.
Merci pour cette méthode. Il m'a sauvé un peu de temps.
Il y avait un couple de choses que je devais changer si. Le glBlendFunc appel nécessaire pour être:
Et d'autre part, le texte semble être le dessin en un seul point. Le CGRectMake appel est la création d'une 1x1 rectangle, à moins que je suis en train de lire que de manière incorrecte.
Utiliser les "rêveries" de la police de la bibliothèque:
http://www.themusingsofalostprogrammer.com/2010/01/how-to-do-font-rendering-in-opengl-on.html
Facile 🙂
Il est livré avec support de l'unicode, des charges, des glyphes "à la demande", et a même un moyen de variables de sortie
J'ai créé une classe de la Police similaire à la "rêveries" bibliothèque de polices, moins les fuites de mémoire et moins de la création de textures pour chaque personnage, à chaque image. Il utilise encore un autre glTexture pour chaque caractère bien. Remarque: Texture2D a été modifié pour commenter sa texture suppression.
initialisation dans le constructeur:
_font = new Font("Helvetica", 40);
utiliser dans redraw() méthode:
_font->draw("Hello, World!", 50, 100, ALIGN_LEFT);
GitHub lien:
https://github.com/chandl34/public/tree/master/personal/c%2B%2B/Font
Vérifier le crash de démonstration. Le Texture2D classe qui est fourni permet la création de textures avec du texte et une police. (J'espère qu'il y aura une meilleure réponse j'aimerais bien un moyen plus simple de dessin à un opengles vue)
Oui, il y en a 2 que je ne connais. Le truc, c'est, vous devez vous rendre à la texture à l'aide de Quartz (CGContext* fonctions), puis effectuer le rendu de la texture pour l'utilisateur de voir.
Si vous êtes inquiet au sujet de la performance, vous pouvez également utiliser le Quartz pour générer votre texture atlas.
Il est assez facile de concocter une texture outil de génération (dans xCode) une fois que vous connaissez les bases de rendu d'une police.
Tout ce que vous avez à faire est d'avoir un valide CGContext. Vous pouvez trouver quelques-uns vraiment excellent exemple de code dans cet la texture chargeur.
Fondamentalement, le code va:
Il est à la recherche assez bonne et l'anticrénelage,
Une liste de ios polices est disponible ici, et avec prerenders ici