Upload
angel-garcia
View
92
Download
1
Embed Size (px)
Citation preview
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
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.
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
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.
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.
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.
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.
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.
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.
Graficación por computadora avanzada
Practica 04 – Aplicación de la función de transparencia glBlendFunc () cumpliendo con la variante 5 9
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
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.
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.
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.
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.
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.
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.