martes, 19 de febrero de 2008

Previo Practica 2


Cuestionario previo #2
Práctica del 19 de febrero de 2008
- Principios básicos -


1. ¿Qué es una transformación geométrica?
¿Cuáles son las transformaciones básicas y sus matrices?

Una transformación geométrica es una función matemática que
transforma un punto o conjunto de puntos en otro punto o
conjunto de puntos, dentro del sistema de referencia global de
la escena.

Las tres transformaciones básicas son la traslación, la rotación y el
escalado.

TRASLACIÓN
Consiste en modificar la posición de
un punto en el plano definido por las coordenadas (x, y),
mediante un movimiento en línea recta desde la posición actual
(posición inicial) a la posición final.

A los valores dx y dy se les denomina distancias de traslación.
Estas distancias son números reales positivos o negativos.





 

ROTACIÓN.
desplaza un punto a través de la
circunferencia definida sobre un centro determinado, es decir,
siguiendo un movimiento circular.
esta operación no modifica la
geometría del objeto, sólo su posición.






ESCALADO.
modifica la distancia de los puntos sobre los que se aplica, respecto a un punto de referencia. Para definir esta operación son necesarios dos factores de escala, Sx y Sy, según las direcciones x e y, y un punto o eje de referencia.














2. Escriba los comandos que en OpenGL permiten aplicar transformaciones geométricas, las variantes de dichos comandos y describa sus parámetros.

Traslación
glTraslatef(float x, float y,float z);
x, y, z: puede ser positivo o negativo, es la distancia que se movera el objeto.

Rotación
glRotate(alfa, float x, float y, float z);
alfa: ángulo que girara
x, y, z: vector sobre el que girara.

Escalado:
glScalf(float x, float y, float z);
x,y,z: factor de escala respecto a los ejes x, y, z.



3.Describa los comandos que en OpenGL se utilizan para definir vértices y sus parámetros. Escriba un ejemplo de cada uno.

glVertex3f(float x, float y, float z);
x, y, z: es el punto en el espacio donde se ubicara.


4.¿Para qué sirven los comandos glBegin() y glEnd()? Describa su uso, sus parámetros y ejemplifique a través de una pieza de código.

Nos sirven para crear figuras como: lineas, triangulos, cuadrados, puntos. Los parametros de glBegin();
pueden ser los siguientes:

GL_LINES Lineas
GL_LINES_STRIP Lineas en trozos, se van uniendo las lineas
GL_TRIANGLES Triángulos
GL_TRIANGLES_STRIP Triángulos a trozos, se van uniendo los triangulos
GL_QUADS Cuadrados
GL_QUADS_STRIP Cuadrados a trozos, se van uniendo.
GL_POINTS Puntos

El siguiente ejemplo dibuja un triangulo, en el plano Z=0, sus vertices son: (0,0,0), (1,0,0) y (0,1,0)

glBegin(GL_TRIANGLES);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(0,1,0);
glEnd();


5.Construya código para dibujar un cubo y una pirámide de base triángular (tetraedro). Las medidas corren por su cuenta.

TETRAEDRO
#include

void reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,(GLfloat)((width/height)/10), 2,15.0);
//glOrtho(-3,3,-3,3,-6,3);
}


void display()
{
glColor3f(.8f, .81f, .8f);
glClear(GL_COLOR_BUFFER_BIT); // se limpian los buffers de dibujo y profundidad

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0,0,-.1);
glRotatef(20,0,1,0);
glScalef(0.5,.5,.5);

glutWireTetrahedron();

glFlush(); // guarda comandos como peticiones en pila, ejecutra los comandos de pila..

}


int main(int argc, char **argv)
{
glutInit(&argc, argv); // se inicializa el GLUT, mismos
// parametros de main y crea una ventana

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //modo de dibujo de
// ventana. GLUT_SINGLE- un buffer. GLUT_RGB - modelo del color

glutInitWindowPosition(30, 30); // posicion de la ventana

glutInitWindowSize(500, 500); // tamaño de la ventana
glutCreateWindow("Tetraedro"); // propiamente crea la venta, con su nombre

glClearColor(0,0,0,0); // color alque se borra el buffer, (rgbAlfa)
//glEnable(GL_DEPTH_TEST); //actva profundidad

// muestra el fondo de la ventana
glutDisplayFunc(display); // ayuda a GLUT para redibujar por alguna razon, arg es ua funcion

glutReshapeFunc(reshape); // ayuda a GLUT para redibujar por que es reescalada, se pas d arg una func



glutMainLoop(); // cede ctls a GLUT para detectar eventos

return 0;
}



CUBO

#include

void dibujaCubo(void) // cra un cubo
{
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_QUADS); //cara frontal
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glEnd();
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_QUADS); //cara trasera
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glEnd();
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS); //cara lateral izq
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();
glColor3f(1.0f, 1.0f, 0.0f);
glBegin(GL_QUADS); //cara lateral dcha
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glEnd();
glColor3f(0.0f, 1.0f, 1.0f);
glBegin(GL_QUADS); //cara arriba
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_QUADS); //cara abajo
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glEnd();
}

void reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,(GLfloat)((width/height)/10), 2,15.0);
//glOrtho(-3,3,-3,3,-6,3);
}


void display()
{
glColor3f(.8f, .81f, .8f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // se limpian los buffers de dibujo y profundidad

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0,0,-.1);
glRotatef(20,1,1,-1.5);
glScalef(0.5,.5,.5);

dibujaCubo();

glFlush(); // guarda comandos como peticiones en pila, ejecutra los comandos de pila..

}


int main(int argc, char **argv)
{
glutInit(&argc, argv); // se inicializa el GLUT, mismos
// parametros de main y crea una ventana

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //modo de dibujo de
// ventana. GLUT_SINGLE- un buffer. GLUT_RGB - modelo del color

glutInitWindowPosition(30, 30); // posicion de la ventana

glutInitWindowSize(500, 500); // tamaño de la ventana
glutCreateWindow("Cubo"); // propiamente crea la venta, con su nombre
glEnable(GL_DEPTH_TEST); //actva profundidad
glClearColor(0,0,0,0); // color alque se borra el buffer, (rgbAlfa)
//glEnable(GL_DEPTH_TEST); //actva profundidad

// muestra el fondo de la ventana
glutDisplayFunc(display); // ayuda a GLUT para redibujar por alguna razon, arg es ua funcion

glutReshapeFunc(reshape); // ayuda a GLUT para redibujar por que es reescalada, se pas d arg una func



glutMainLoop(); // cede ctls a GLUT para detectar eventos

return 0;
}



6.¿Para qué sirven los comandos glClearColor() y glClear()? Descríbalos su funcionamiento, sus parámetros y ejemplifique a través de una pieza de código.

void glClearColor(float R, float, G, float B, float alpha);
Donde R, G, B: van de cero a uno, sirve para borrar dando de fondo el color indicado. Alpha, también va de cero a uno
glClear();
Fija el área de mapa de bits de la ventana a valores preestablecidos por glClearColor.

glClearIndex, glClearDepth, glClearStencil, y glClearAccum.
Sus argumentos son: GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, GL_STENCIL_BUFFER_BIT


7.Describa los comandos glutInit(), glutInit(), glutInitDisplayMode(), glutInitWindowSize(), glutInitWindowPosition(), glutCreateWindow(), glutDisplayFunc(), glutReshapeFunc(), glutKeyboardFunc() y glutMainLoop(). Describa su funcionamiento, uso y parámetros.


glutInit()
Indica que dara inicio GLUT. Su notación es glutInit(&argc, argv); sus parametros son los mismos de la entrada del main();
int main(int argc, char **argv)

{

glutInit(&argc, argv);
...}

glutInitDisplayMode ();
Inicializa el modo del display, algunos de sus argumentos pueden ser: GLUT_SINGLE, GLUT_RGB, GLUT_DOUBLE,
glutInitWindowSize (float x, float y );
Inidca el tamaño de la ventana inicial. x ancho, y alto

glutInitWindowPosition (float x, float y);
Indica donde aparecera la ventana, especificamente la ezquina superior izquierda.

glutCreateWindow (String name);
Esta funcion es la que propiamente crea la ventana con el argumento del nombre.

glutDisplayFunc(function);
Es una funcion de callback, su argumento es una función, por lo regular llamada display();
sirve para redibujar la pantalla (contenido) , es aqui donde se despliega el desarrollo de las escenas.


glutReshapeFunc()
También e suna función de callback, con las mismas caracteristicas de glutDisplayFunc(); pero esta función ayuda para el reescalamiento de la ventana, o movida. la funcion reshere tiene como argumentos el ancho y alto de la venta. se define asi:
void reshape(int width, int height);

glutKeyboardFunc()
También e suna función de callback, para darle un tratamiento al teclado. el parametro utilizado es
la función Keyboard que esta tiene de argumentos:
unsigned char key, int x, int y: char, es el ASCII de la tecla presionada y x,y la posición del mouse en se momento.
void keyboard(unsigned char key, int x, int y);



glutMainLoop();
Es un loop infinito, para esatr atento a las funcionces de callback. el program nunca saldra, a menso que se especifique un exit.


No hay comentarios: