P05 montellano flores_tania_guadalupe

24
Universidad Politécnica de Victoria Practica 5 Nombre: “Aplicación de texturas además de transparencia e iluminación a un objeto en 3DMateria: Graficación por computadora avanzada Profesor: Dr. Marco Aurelio Nuño Maganda Alumna: Tania Guadalupe Montellano Flores Fecha: 19/marzo/2014 2014

Transcript of P05 montellano flores_tania_guadalupe

Universidad

Politécnica de Victoria

Practica 5

Nombre: “Aplicación de texturas

además de transparencia e

iluminación a un objeto en 3D”

Materia: Graficación por computadora avanzada Profesor: Dr. Marco Aurelio Nuño Maganda Alumna: Tania Guadalupe Montellano Flores Fecha: 19/marzo/2014

2014

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 1

Contenido

1. Introducción ......................................................................................................................................... 1

2. Desarrollo ................................................................................................................................................ 1

2.1 Código añadido para la práctica 5 ................................................................................................... 14

3. Resultados ............................................................................................................................................ 21

4. Conclusión ............................................................................................................................................. 23

5. Referencias ........................................................................................................................................... 23

1. Introducción

Continuando con el trabajo de la materia graficación avanzada, para la práctica

cinco nos solicitaron trabajar con una figura de la practica 4. Trabajando con iluminación

y transparencia haciendo uso de la función glBlendFunc() a la figura y principalmente

agregarle texturas a la mesa, que fue el objeto que se me asigno en la práctica número

tres, se trabajo con cinco texturas distintas, fueron necesarias varias funciones para

cargar las imágenes y asignarlas a un id que sería el identificador de la textura y así

poder hacer uso de la misma.

2. Desarrollo

Primeramente para implementar lo comentado en la introducción, se necesita de varias

librerías iostream, GLUT/glut.h y la librería GL/glut.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 2

Se agregaron las variables que nos ayudarán a realizar movimientos de las figuras en

lo los ángulos de x, y, z. También las variables v0, v1 y v2 que son usadas para definir

cada vértice de la figura octaedro, la variable blend que permitirá realizar la

transparencia para dejar ver el objeto dentro del octaedro.

Inicialización de los materiales

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 3

Este código muestra arreglos con los vértices de cada parte que conforma la mesa en

3D.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 4

Los siguientes arreglos se declararon para definir los colores a utilizar en el dibujado de

la mesa.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 5

La siguiente parte del código incluye siente funciones que dibujan por separado cada

parte de la pesa, misma que se compone de rectángulos que fueron creados

basándome en el Cubo 3D, estas funciones reciben cinco parámetros para los vértices

y el arreglo de colores, tenemos una la función glColor3fv(arrColor[iColor) que le dará

color a cada parte de la mesa, la función glBegin() hace uso de la primitiva gl_polygon

para recibir cada los cuatro vértices de la figura e ir dibujándola en las coordenadas

correspondientes y glEnd() para finalizar la función de dibujado. Así mismo para las

todas las partes de la mesa, donde únicamente cambiaran las coordenadas de los

vértices en los arreglos antes declarados.

Las siguientes funciones reciben los mismo parámetros, son para las siguientes partes

de la mesa y las orillas que nos sirven para resaltar la parte de arriba de la mesa ya que

se pierde por ser completamente del mismo color café claro.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 6

La siguiente función es necesaria para ir dibujando cada lado del polígono de forma

rectangular y darle color, mismo que en general forma cada parte de la pesa ya que es

de figura rectangular y para las patas se utiliza solo una función, aquí se le pasan los

valores a las funciones que reciben como parámetros los valores de los cuatro vértices

y el arreglo del color.

Estas funciones siguientes son todas las que se requieren para dibujar cada parte de la

mesa dibujando casa lado y dándole el color del arreglo especificado.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 7

Analizando código del octaedro

Es necesario crear un arreglo de flotantes para utilizarlos como vértices, los primeros

tres índices del vector son usados como referencia para la indexación de los vértices de

la figura.

Para la correcta utilización del arreglo de vértices, se necesita de un arreglo de índices

para los vértices del octaedro ya mencionados.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 8

Cuando ya hemos declarado las variables y arreglos necesarios para dibujar las dos

diferentes figuras de la práctica, el siguiente código del método Setup nos permite

asignar color al fondo donde se estarán mostrando las figuras, habilitamos el depth

testing, e inicializamos las variables para la rotación de las figuras.

Continuando con las funciones esenciales para la interacción del programa, se define el

método keyboardCallbackProc que recibe el la tecla y los valores para x y y para cada

caso donde las algunas teclas realizarán una acción especificada en esta parte del

código, moviendo la figura en los ángulos que se deseen. Estas acciones pueden ser

para los movimientos de los diferentes ángulos de las figuras, las teclas b y B nos

ayudarán a dar el efecto de transparencia y permitir ver la figura encerrada dentro del

octaedro, los números 1, 2, 3, 4 y 5 nos ayudaran a cambiar los materiales de la mesa.

La tecla X para rotarlo en el ángulo x negativo, la tecla x para el ángulo positivo, la tecla

Y para rotarlo en el ángulo y negativo, la tecla y para el ángulo positivo, la tecla Z para

rotarlo en el ángulo z negativo, la tecla z para el ángulo positivo. Donde al presionar

cada tecla deseada se realiza el incremento de cada ángulo respectivamente, se invoca

el método glutPostRedisplay el cual consiste en redibujar la figura pero ahora con los

nuevos valores de los ángulos. Al final la tecla esc para salir.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 9

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 10

La figura que de octaedros fue utilizada para esta práctica se compone por 8 octaedros

azules y 7 octaedros morados.

Se necesito de una función para dibujar un octaedro morado y otra función para dibujar

el octaedro azul.

Para dibujarlo aparte de hacer uso de la función que ya se especificaron, para dibujar

los octaedros ya sean azueles o morados, haremos uso de la función glTranslatef (),

esto para poder mover las figuras con mayor facilidad, esta recibe 3 parámetros los

cuales con valor en x, y, z en donde queremos que la figura se ubique.

Así como encerramos nuestra llamada a función en las funciones glPushMatrix() y

glPopMatrix(), esto para poder mover las figuras sin afectar a las demás. Esto se

trabaja en la función , al dibujar el octaedro deshabilite la luz para

que no sea afectado, ya que el material solo se la aplica a la figura del centro, se

utilizan la función glDisable(GL_LIGHTING) y glDisable(GL_LIGHT0).

Código para ir colocando los octaedros

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 11

La segunda parte se compone por 5 octaedros morados, uno en el centro y los otros 4

alrededor formando un cuadro.

Para la tercera parte se utilizó la misma forma de la primera ya que la malla se

compone por una parte frontal que es igual que la parte trasera.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 12

Para dibujar la mesa y habilitar la propiedad de materiales, en la función drawScene() introduje el siguiente código, donde también habilite la función de la iluminación llamando la función initligths() y la función dibujaMesa() para mostrar la mesa en pantalla.

En la siguiente parte del código se mandan llamar las funciones para cada parte de la mesa, se requirió de usar en varias ocasiones la función glTranslatef() solo para reposicionar las patas y bases que son exactamente iguales, pero solo necesitaban colocarse en otras coordenadas, al incluir esta parte del código la mesa era más grande que los octaedros por lo tanto se utilizo la función glScalef() para darle un tamaño menor y que la mesa no sea visible sin antes presionar la tecla b o B antes mencionara para activar blendFunc.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 13

Para que se aprecien los colores de los materiales es necesario habilitar la iluminación, donde se necesita una posición única, luz ambiental, luz difusa y espectacular, luz global ambiental.

En este método siguiente se manda llamar la función que es esencial para esta práctica glBlendFunc () entre otras que nos ayudan a definir las perspectivas de visión y los ángulos donde serán visualizadas las figuras.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 14

2.1 Código añadido para la práctica 5

Variable booleana trans para ir cambiando el estado de la transparencia.

Vector texture donde el número es el total de texturas con las que se trabajara.

GLuint texture[5];

Para esta práctica se me presentaron problemas con el uso de la iluminación, así que cambie la forma de habilitarla y utilice nuevos vectores, para la luz ambiental, difusa y la posición de la misma.

Agregué las librerías assert y fstream ya que se requieren para la utilización de imágenes.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 15

Las siguientes son funciones y clases explicadas en clase, estas son esenciales para cargar las imágenes de los directorios y poder hacer uso de estas en nuestros programas.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 16

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 17

Image* loadBMP(const char* filename) {

}

Esta parte del código es para asignar un id a cada textura

Agregué la sig. Función para las texturas y la mando llamar en el main

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 18

Para cada parte que forma la mesa fue necesario código como el siguiente, donde se habilita la textura y para cada lado, con glVertex3f y las correctas coordenadas se le logra aplicar textura a un polígono.

Parte de la transparencia con uso del teclado que fue modificada

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 19

Para la iluminación

La función dibujaMesa() es la que engloba cada una de las funciones para dibujar las partes de la mesa, aquí también se deshabilita la transparencia ya que sin esto la textura no se aprecia bien.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 20

En la función drawScene donde se dibujan todos los objetos agregué esta parte de código que nos permite habilitar la transparencia solo a los objetos deseados y mande llamar la función dibujaMesa();

En la función drawScene() donde se dibujan los octaedros y la mesa, añadí estas líneas de código para el correcto funcionamiento de las texturas, y fue al principio antes de mandar a dibujar el octaedro.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 21

El siguiente método también es necesario para el tamaño de la ventana mismo que será llamado en el método main por la función glutReshapeFunc();

Para finalizar se usa el método main que invoca a todos los métodos anteriormente descritos y el cambio de las propiedades de la ventana, tales como el tamaño y la posición, funciones del teclado y cargar texturas con initRendering().

3. Resultados

Estas dos primeras imágenes muestran la mesa ya con texturas y el menú en consola con las teclas a presionar para la aplicación de iluminación, transparencia y los movimientos en los diferentes ángulos.

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 22

Parte inferior de la mesa texturizada

Parte superior de la mesa texturizada

Graficación por computadora avanzada

Practica 05 – Aplicación texturas, transparencia, materiales e iluminación a nuestro objeto 23

4. Conclusión

En esta práctica aprendí a trabajar ampliamente con las texturas, las dudas que

se me habían presentado en cuando a las coordenadas de las texturas y la debida

aplicación de la misma ya las resolví, trabajando con iluminación también tuve algunos

problemas para los materiales.

Es necesario aprender implementación amplia de la iluminación, ya que se utiliza

mucho para los materiales y con esta práctica pude conocer cómo se habilita la luz y

como afecta a los materiales del objeto.

En cuanto a la transparencia se me presento el problema de que me daba

transparencia al objeto mesa, y solo quería aplicarla al octaedro, ósea la parte exterior o

tipo domo donde está la mesa encerrada, para esto utilice adecuadamente el dept_test,

y algunas modificaciones en el switch.

Me fue interesante y muy práctico lo que aprendí, y considero que me será de

gran ayuda para llevar a cabo prácticas que sean solicitadas durante el resto del curso.

5. Referencias

Practica TexIlumBleV01, practica CuboTexturizado.