Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Texto En Ogl.

Iniciado por Degiik, 12 de Agosto de 2003, 07:39:56 PM

« anterior - próximo »

Degiik

 Hola me gustaria saber la forma mas optima de sacar texto por pantalla. He mirado los tutos de nehe, pero me parece muy rocambolesco. Estoy interesado en cualquier metodo que saque texto por pantalla.


Los demos de 64k como tratan los textos ? ( creo que no como los tutos que mencione )


Gracias.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

 Las demos de 64k creo que usan las funciones que da la API de windows para tener fuentes en ogl. Si quieres ver como se hace bajate una demo de spinnin kids ( el programador es un tal rIO busca en google). Ahi te muestra como crear una display list con la fuente que desees. Te pego el código que tengo yo adaptado del codigo que te he dicho antes:


    Font(Display *dsp, const char *s) {
             HFONT   font = CreateFont(   12,      
              0,
              0,
              0,
              900,
              FALSE,
              FALSE,
              FALSE,   
              ANSI_CHARSET,      
              OUT_TT_PRECIS,      
              CLIP_DEFAULT_PRECIS,   
              ANTIALIASED_QUALITY,   
              FF_DONTCARE|DEFAULT_PITCH,
              s);            

           SelectObject(dsp->GetDC(), font);

            base = glGenLists(96);

            wglUseFontOutlines(dsp->GetDC(), 32, 96, base,
              0.015f,         
              0.0f,         
              WGL_FONT_POLYGONS, gmf);

           DeleteObject(font);
       }

_Grey

 Tambien puedes utilizar la API de windows para sacar texto.

De todas formas lo que se suele hacer en OpenGL (y Direct3D), es utilizar poligonos con textura, es decir, se tiene una textura con todos los caracteres a usar (yo recomendaria que se usara el mismo orden que en ASCII), luego cuando sacas texto solo tienes que hacer poligonos "Cuadrados" (creo que en OpenGL se llamaban qauds... o algo asi :unsure: ) y usar las cordenadas de textura con la textura con el grafico que contiene el "dibujo" de los caracteres.

Lo mas seguro es que te hagas una funcion a la que le pases una cadena de texto, que pase a poligonos, por eso recomiendo que los caracteres tengan en la imagen el mismo orden que en el codigo ASCII, te sera mas facil hacer los calculos de la posicion en la textura de un determinado caracter.

Recuerda, que lo mejor es cambiar el sistema de coordenadas a una proyeccion orthogonal, o ten en cuenta la coordenada Z si usas perspectiva!

Degiik

 Lo primero gracias a todos por responder.

ethernet como solucion del momento me parece bien. Pero no creo que sea lo mas profesional.

Citarse tiene una textura con todos los caracteres a usar

Donde genero eso ?  (nooo) un poco laborioso si se hace a mano, no ?


Au!
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Mars Attacks

 Cualquier programa de 2D con opción para escribir texto te ayudará a hacerlo de una forma sencilla (toda la laboriosidad consistirá en escribir el abecedario un par de veces en forma de matriz bidimensional) y una buena ventaja de este método es que para cambiar de tipografía basta con cambiar la textura que utilices. Puedes crear tus propios alfabetos con la única limitación de lo que te apetezca.
Un saludo.

Zaelsius

Cita de: "Degiik"
Citarse tiene una textura con todos los caracteres a usar

Donde genero eso ?  (nooo) un poco laborioso si se hace a mano, no ?
Afortunadamente existen herramientas pensadas para ello. Una de ellas es la incluida en el motor Irrlicht(IrrFont Tool). Lo bueno es que tambien incluye el código fuente( win32). Bájate el SDK 0.4 y mira en la carpeta /Tools.

Degiik

 Capto la idea, ahora solo una pregunta, el texto final a mostrar como deberia estar generado... una letra un poligono-textura correspondiente ? ( no serian muchas texturas y muchos poligonos ? ) o bien generar una textura con todo el texto a sacar, y ponerlo en un solo poligono ( my lento no ? ).

Au! y gracias a todos.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Mars Attacks

 En un único tga (es el formato usual para ponerle además el alpha que quieras para que sólo te saque las letras) escribes todo el abecedario (o lo que necesites). Luego sólo tienes que aplicarle a un plano esa textura con las coordenadas U,V adecuadas para que represente la letra que tú quieras.

ZeruGiran

 
Citar
ethernet como solucion del momento me parece bien. Pero no creo que sea lo mas profesional.

Me parece mas "profecional" pedirle al Api del sistema que te genere la fuente, como ya comenta ethernet.

Es un poco mas chungo y costoso hacer las letras con texturas. Ya que tendrias que tener una textura por cada tipo de fuente (arial, verdana, courier, etc, las que necesites)

Ademas gastaras un poligono de 4 lados por letra.

Ninguna de las dos soluciones es mala, una tiene ventajas sobre la otra.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.