17
Universidad Politécnica de Victoria Practica 4 Nombre: “Aplicación de función glBlendFunc () a un objeto en 3D y materialesVariante 5 Materia: Graficación por computadora avanzada Profesor: Dr. Marco Aurelio Nuño Maganda Alumna: Tania Guadalupe Montellano Flores Fecha: 12/marzo/2014 2014

P04 montellano flores_tania_guadalupe

Embed Size (px)

Citation preview

Page 1: P04 montellano flores_tania_guadalupe

Universidad

Politécnica de Victoria

Practica 4

Nombre: “Aplicación de función

glBlendFunc () a un objeto en 3D

y materiales”

Variante 5

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

2014

Page 2: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 1

Contenido

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

2. Desarrollo ..................................................................................................................................... 2

3. Resultados ................................................................................................................................. 15

4. Conclusión.................................................................................................................................. 16

5. Referencias ................................................................................................................................ 16

1. Introducción

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

cuatro me fue asignada la variante número cinco, en la que se solicita trabajar con una

figura realizada por compañeros de clases anteriores y se analizo el código de ellos,

mismo que consiste en una polígono formado por varios octaedros en color azul y otros

en color morado. Trabajando con el polígono anteriormente mencionado se agregará el

objeto realizado en la práctica número tres que consistió en dibujar una mesa en 3D, y

se le aplicará transparencia haciendo uso de la función glBlendFunc() a la figura en

colores azul y morado, con el uso de una tecla en especifico se dejara ver la mesa que

deberá tener un tamaño menor y así quedar completamente dentro del octaedro, para

esto se hace uso de la función glScalef(x, y, z).

A simple vista no se apreciará, sino hasta hacer uso de la función de transparencia.

Está transformación podrá ser apreciada desde todos los ángulos de la figura en las

tres dimensiones.

También se habilitaron materiales para la figura de la práctica tres que fue añadida al

ejemplo del octaedro. Se trabajó con iluminación y propiedades de la luz.

Page 3: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 2

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.

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

Page 4: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 3

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

3D.

Page 5: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 4

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

la mesa.

Page 6: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 7: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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 uti liza 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.

Page 8: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 9: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 10: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 9

Page 11: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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

Page 12: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 13: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 14: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 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.

Page 15: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 14

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, y funciones del teclado.

Page 16: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 15

3. Resultados

Estas dos primeras imágenes muestran la malla de octaedros desde diferentes ángulos

de visión.

Continuando con las imágenes, ahora muestro el resultado cuando ya se ha presionado

la tecla que activa a función de transparencia, se aprecia la mesa desde un ángulo de

inclinación y con material oro (gold), y en la otra imagen se ve la mesa con material rojo

platico (red plastic) al centro de los octaedros.

Page 17: P04 montellano flores_tania_guadalupe

Graficación por computadora avanzada

Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 16

Ahora muestro el resultado de ver la mesa desde un ángulo superior y con material

verde plástico (red plastic).

4. Conclusión

Nuevamente al continuar con las practicas de la materia, conocí como trabajar

con funciones que permiten hacer un objeto transparente y así cumplir con lo requerido

en la práctica número cuatro, también continúe trabajando y practicando con arreglos

de vértices y funciones para escalar un objeto ya sea hacerlo más chico o más grande.

Otro tema muy interesante y necesario de aprender para casi cualquier

implementación amplia, es la iluminación, ya que se utiliza mucho para la utilización de

materiales y con esta práctica pude conocer cómo se habilita la luz y como afecta a los

materiales del objeto.

Por otra parte analizando el código de mis compañeros quienes realizaron la

parte de los octaedros igualmente aprendí de las funciones pushMatrix y popMatrix.

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 CuboIlum3 y SupBezSolV2 proporcionadas en clase.