martes, 28 de agosto de 2007

Previo 2. OPENGL y modelado geométrico.

1. Investigue el uso, parámetros y variantes de los comandos OPENGL.

glVertex. Especifica un vértice para el uso en la descripción de un objeto geométrico. El número de coordenadas puedeser de 2 (x,y), 3 (x,y,z) y 4 (x,y,z,w).

glBegin() . Marca el inicio de una lista de vértices que describen una primitiva geométrica.El tipo de primitiva está indica por el cual puede tener uno de los siguientes valores.

glEnd(). Marca el final de una lista de vértices.

glPushMatrix(). Empuja todas las matrices un nivel hacia abajo e introduce la matriz actual. Si hay demasiadas matrices entonces se generará un error.

glPopMatrix(). Saca la primera matriz de la pila, por lo tanto la segunda pasa a ser la primera. Los contenidos de la primera matriz son eliminados. Si la pila contiene una sola matriz, entonces se generará un error.

glTranslate. Variables: TYPE x, TYPE y, TYPE z. Multiplica la matriz actual por una matriz de traslación que mueve.

glRotate. Parámetros: TYPE angle,TYPE x, TYPE y, TYPE z. Multiplica la matriz actual por una matriz de rotación que rota el objeto en ladirección de las agujas del reloj sobre el radio de origen en el punto x,y,z.

glScale. Variables: TYPE x, TYPE y, TYPE z .Multiplica la matriz actual por una matriz que cambia el tamaño del objeto a lo largo de los ejes. Las coordenadasx, y, z de cada objeto es multiplicada por los parámetros x, y, z.

glClear(). Limpia los buffers especificados asignándoles los valores actuales.

glClearColor(). Parámetros: GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha. Establece el color actual que va a aparecer en el fondo de la ventana en modo RGBA. Los valores red, green, blue y alpha están restringidos entre los valores [0,1]. El valor por defecto es (0,0,0,0) negro.

2. Escriba un programa que diuje un tetraedro (puede basarse en el código del cube.c que se encuentra en la distriución del GLUT).

#include
/* La siguiente función limpia el buffer y coloca el tetraedro*/
void tetra() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0.5,0.6, 0);
glVertex3f(1, 0, 0);
glColor3f(1, 1, 1); glVertex3f(-1, 0, 1);
glColor3f(0, 0.8, 1);
glVertex3f(1, 0, 1);
glColor3f(0, 0, 0.5);
glVertex3f(0, 0, -1.4);
glColor3f(1, 1, 0);
glVertex3f(0, 0, 0);
glColor3f(1, 1, 0);
glVertex3f(-1, 0, 1);
glEnd();
glFlush();
}

void ini() {
glClearColor(0, 0, 1, 1);
glColor3f(0, 0.6, 1.0);
glEnable(GL_CULL_FACE);/*deshabilita que se dibujencaras posteriores*/
glCullFace(GL_BACK);
glMatrixMode(GL_PROJECTION);/*Se configura la proyección*/
glLoadIdentity();
glFrustum(-2, 2, -1.5,0, 1, 40);/*Se configuran los planos*/
glMatrixMode(GL_MODELVIEW);/*Se configura la vista de la figura*/
glLoadIdentity();
glTranslatef(0, 0, -1);
glRotatef(60, 1, 0, 0);
glRotatef(50, 0, 1,90);
}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE GLUT_RGB);/*Se inicial el GLUT*/
glutInitWindowPosition(80, 80); /*aqui se indica la posicion de la ventana*/
glutInitWindowSize(300,250); /*aqui el tamaño de la ventana*/
glutCreateWindow("tria"); /*nombre de la ventana donde se muestra la figura*/
glutDisplayFunc(tetra); /*se manda a llamar la funcion tetra*/
ini();
glutMainLoop();
}


3. Cree un archivo de cabecera, llamelo objetos.h y ahi deposite el código del tetraedro. Siempre tenga a la mano este archivo.

objetos.h

#include
/* La siguiente función limpia el buffer y coloca el tetraedro*/
void tetra() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0.5,0.6, 0);
glVertex3f(1, 0, 0);
glColor3f(1, 1, 1);
glVertex3f(-1, 0, 1);
glColor3f(0, 0.8, 1);
glVertex3f(1, 0, 1);
glColor3f(0, 0, 0.5);
glVertex3f(0, 0, -1.4);
glColor3f(1, 1, 0);
glVertex3f(0, 0, 0);
glColor3f(1, 1, 0);
glVertex3f(-1, 0, 1);
glEnd(); glFlush(); }
void ini() {
glClearColor(0, 0, 1, 1);
glColor3f(0, 0.6, 1.0);
glEnable(GL_CULL_FACE);/*deshabilita que se dibujencaras posteriores*/
glCullFace(GL_BACK);
glMatrixMode(GL_PROJECTION);/*Se configura la proyección*/
glLoadIdentity();
glFrustum(-2, 2, -1.5,0, 1, 40);/*Se configuran los planos*/
glMatrixMode(GL_MODELVIEW);/*Se configura la vista de la figura*/
glLoadIdentity();
glTranslatef(0, 0, -1);
glRotatef(60, 1, 0, 0);
glRotatef(50, 0, 1,90); }
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE GLUT_RGB);/*Se inicial el GLUT*/ glutInitWindowPosition(80, 80); /*aqui se indica la posicion de la ventana*/
glutInitWindowSize(300,250); /*aqui el tamaño de la ventana*/
glutCreateWindow("tria"); /*nombre de la ventana donde se muestra la figura*/ glutDisplayFunc(tetra); /*se manda a llamar la funcion tetra*/
ini();
glutMainLoop();
}

Práctica 1. "Ambiente de trabajo y configuración de proyectos".

1. Describe paso a paso la forma en que se crea un proyecto en VS 2005.

Al entrar a Windows vista debemos asegurarnos de ser administradores, ya que asi evitaremos muchos contratiempos. Posteriormente abrimos VS 2005, nos dirigimos al menú File, eligiendo la opción New, y ahi Project. Dentro de Project se elige C++, se debe expandir esta opción y elegir en Win32, la opción Win32 console aplication.Se debe poner un nombre a la solución que es donde estarán todos nuestros proyectos afines y al proyecto actual, para después elegir Empty Project y luego Finish.

2. ¿Qué pasos hay que seguir para configurar los proyectos que pueden utilizar la librería GLUT?

Se deben descargar los siguientes archivos de www.opengl.com/codingresources/libraries : GLUT 3.7 Source Code Download for Win32 y Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT y descargarlos en Mis Documentos. Luego se debe crear una carpeta que contenga otras carpetas: incude, dll, lib. Después de descomprimir los archivos de Glut, de la carpeta glutdll37 copio los .dll en la carpeta dll, y los .lib en la carpeta lib. Dentro de la carpeta include, creamos una carpeta llamada GL, en la cual colocamos el archivo glut.h. En las propiedades del archivos se debe elegir Linker en General se tiene la opción Aditional Library Directories, en donde se coloca la ruta de la carpeta lib. También en propiedades, se elige en C/C++ la opción aditional include directories y se especifica la ruta de la carpeta include.

3.¿Cuál es la diferencia de crear un proyecto C++ console aplication y un proyecto C++ en Win32 proyect?

La diferencia básica es que una aplicación de console es para utilizarse en una consola, como MS-DOS, y las de Win32 se ejecutan en Windows.

4.¿Cuál es la diferencia entre ejecutar la aplicación recién creada en modo debug y sin debug?

Al ejecutar en modo debug, se tiene información de errores en el tiempo de la ejecución. Sin debug, no se tiene esta información.

5.¿Qué es una variable de entorno?¿Cómo se puede crear y/o modificar en Windows Vista?

El entorno es una área de memoria, la cual tiene variables que contienen información que usa el sistema para poder funcionar, un ejemplo es PATH que tiene la dirección de archivos importantes para el sistema. Se modifican en el panel de control, en Sistema, entrando en opciones avanzadas.