martes, 25 de septiembre de 2007

Previo Práctica 6

1.-¿Cómo se dibuja texto con Glut?¿Cambia el dibujo de texto en FreeGlut y OpenGL?¿por qué?
R: complicada ya que la biblioteca GL sólo proporciona funciones muy primitivas para trazado de bitmaps que obligan a disponer de una librería propia de bitmaps para los caracteres. GLUT va un poco más allá y dispone de unas pocas funciones que permiten renderizar texto en pantalla.

glutBitmapCharacter(void * font, int character)
Permite escribir texto carácter a carácter pasándole sólo la fuente del texto y el carácter a imprimir.
Tipos de fuentes en Glut:

GLUT_BITMAP_9_BY_15
GLUT_BITMAP_8_BY_13

GLUT_BITMAP_TIMES_ROMAN_10

GLUT_BITMAP_TIMES_ROMAN_24

GLUT_BITMAP_HELVETICA_10

GLUT_BITMAP_HELVETICA_12

GLUT_BITMAP_HELVETICA_18

freeglut está pensado para ser un clon en código abierto y 100% compatible de la librería GLUT. GLUT es un entorno de herramientas independiente del sistema de ventanas para escribir programas OpenGL, implementando una API simple de creación de ventanas, que hace muy secillo el aprendizaje y la exploración de la programación OpenGL.

2.-Cómo funcionan y cuáles son los parámetros de los comandos:


glutBitmapCharacter()


Uso
void glutBitmapCharacter(void *font, int character);
font .- Tipo de Fuente para el caracter que se va a utilizar
carácter.- Caracter a renderizar.

Descripción
Renderiza un caracter usando OpenGL. Permite mostrar en la pantalla un caracter con algún tipo de fuente que se le asigne.
Las Fuentes disponibles para glutBitmapCharacter son:

GLUT_BITMAP_8_BY_13
-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1
GLUT_BITMAP_9_BY_15
-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1
GLUT_BITMAP_TIMES_ROMAN_10
-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1
GLUT_BITMAP_TIMES_ROMAN_24
-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1
GLUT_BITMAP_HELVETICA_10
-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1
GLUT_BITMAP_HELVETICA_12
-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1
GLUT_BITMAP_HELVETICA_18
-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1

La representación de un carácter que no existe no tiene ningún efecto.

glutStrokeCharacter()


Uso
void glutStrokeCharacter(void *font, int character);
font.- Fuente a utilizar
character.- Caracter a renderizar.

Descripción
Renderiza un Stroke Caracter(Caracter de tipo a mano alzada). Las Fuentes disponibles para esta función son las siguientes:

GLUT_STROKE_ROMAN
Roman Simple Espaciada Proporcionadamente. El máximo alto de los caracteres en esta fuente es de 119.05 unidades.
GLUT_STROKE_MONO_ROMAN
Roman Simple monoespaciada. El máximo alto de los caracteres en esta fuente es de 119.05 unidades. Cada caracter es de 104.76 unidades de ancho.

¿En que diferencian?

La diferencia está en el tipo de fuentes que utilizan, unas ya son definidas y en la otra son a mano alzada.

3.-Escriba un programa que dibuje su nombre y número de cuenta en la pantalla.

#include
#include


void *font = GLUT_BITMAP_HELVETICA_18;
void *fonts[] =
{
GLUT_BITMAP_9_BY_15,
GLUT_BITMAP_HELVETICA_18,
GLUT_BITMAP_HELVETICA_18
};

void
output(int x, int y, char *string)
{
int len, i;
glRasterPos2f(x, y);
len = (int) strlen(string);
for (i = 0; i < len; i++) {
glutBitmapCharacter(font, string[i]);
}
}

void
display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);

output(50, 80, "Adrian Quintanar Mondragon");
output(55, 110, "Num. de cuenta 301212735");
glutSwapBuffers();
}

void
reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, h, 0);
glMatrixMode(GL_MODELVIEW);
}

int
main(int argc, char **argv)
{
int i, msg_submenu, color_submenu;

glutInit(&argc, argv);
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-mono")) {
font = GLUT_BITMAP_9_BY_15;
}
}
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(350, 200);
glutInitWindowPosition (150, 150);
glutCreateWindow("Mi nombre y núm. de cuenta");
glClearColor(0.4, 0.4, 0.4, 0.4);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}

No hay comentarios: