Estoy implementando una GUI construida sobre OpenGL. Llegué al problema que tendrá cada GUI: representación de texto. Sé de varios métodos para renderizar texto en OpenGL, sin embargo, me pregunto cuál de ellos sería el más adecuado para una GUI.¿Cómo hacer el renderizado de texto en vivo de OpenGL para una GUI?
Generalmente en una GUI tenemos dos tipos de texto: estático y en vivo. La estática es bastante fácil: podemos convertir un TTF en una textura y olvidarnos de ella. Es el texto "en vivo" el que me molesta más: imagine una consola o un chat en vivo en un juego multijugador.
pensé en varias opciones:
- no hay casos especiales - procesamiento y cargar una textura cada vez que cambia de texto, teniendo en cuenta sólo para reRender cuando aparece realmente nuevo texto, y tratando de dividir el texto más grande en partes pequeñas (como por línea de chat). Sin embargo, esto todavía nos dejaría pendientes en casos como una línea de puntuación que cambia todo el tiempo, o un texto de introducción que representa "por personaje" (estilo de máquina de escribir visto en algunos juegos de ciencia ficción)
- quad-per character - this también parece una solución popular, se prepara una textura con la tabla ASCII y se renderiza un cuarteto texturizado. Sin embargo, tengo serias dudas sobre la eficacia de tal solución. Consejos para hacer eso más rápido también serían bienvenidos.
- soluciones híbridas - sin embargo, no tienen idea de cómo poner en práctica que limpiamente
La pregunta es, por tanto, - la forma de representar el texto en OpenGL eficiente?
Si esto ayuda, estoy codificando en C++ STL/Boost-heavy y apuntando a las tarjetas gráficas GForce 6 y posteriores.
no construyen grandes texturas con todos los glifos posibles en ellos. Si bien es fácil y "sensato" para las fuentes occidentales, si intenta internacionalizar su aplicación rápidamente se dará cuenta de que este enfoque es insostenible con las fuentes orientales. La única solución escalable es generar el texto dinámico, cuando sea necesario. –
Si intenta renderizar glifos individuales usted mismo, está ignorando todo lo que sabe el sistema operativo sobre el interletraje, los acentos y la combinación de caracteres, los guiones de derecha a izquierda y algunas otras peculiaridades del diseño de tipo que me olvido en este momento . Probablemente esté bien tener una hoja de texto con 0-9a-zA-Z con puntuación para cubrir algunos casos muy comunes, pero la mayoría de las veces obtienes un tipo más bonito cuando le pides al procesador de letras toda la línea o párrafo. – codewarrior