dibujar en 3d: puntos, líneas y polígonos. informática gráfica ingeniería informática antonio...
TRANSCRIPT
![Page 1: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/1.jpg)
Dibujar en 3D: puntos, líneas y polígonos.
Informática gráficaIngeniería Informática
Antonio Lillo SanzCarlos Muñoz Martín
Javier Holguera Blanco
Facultad de Ciencias - Departamento de Informática y Automática
Universidad de Salamanca
2 de Mayo de 2007
![Page 2: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/2.jpg)
Introducción
Puntos
Dibujando líneas en 3D
Polígonos
2
Índice general
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 3: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/3.jpg)
Introducción
3
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 4: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/4.jpg)
OpenGL provee de acceso al hardware gráfico
Librería de renderizado a bajo nivel con amplio soporte hardware
Basada en el uso de primitivasSe construyen figuras complejas a partir de ellas
Puntos, líneas y polígonos, elementos básicos
Introducción
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática4
![Page 5: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/5.jpg)
Se debe especificar la relación coordenadas / pixels físicos de la pantalla
Definición de la clipping area
Sistema de coordenadas (I)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática5
![Page 6: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/6.jpg)
Sistema de coordenadas 3D necesita una tercera componente
Eje Z perpendicular a los ejes X e Y
glLoadIdentity para reiniciar los sistemas de coordenadas a la unidad
GLOrtho para establecer límites de los ejes de coordenadas
glViewPort para definir la vista
Sistema de coordenadas (II)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática6
![Page 7: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/7.jpg)
Puntos
7
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 8: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/8.jpg)
Elementos de dibujado esenciales
Se componen de varias coordenadas 3 definidas por el usuario
una cuarta interna (w)
Se especifican con glVertex3f(x,y,z) Un punto en 3D es un vertex
Se dibujan entre las sentencias glBegin(GL_POINTS) y glEnd()
Indica que los vértices son puntos
Puntos (I)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática8
![Page 9: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/9.jpg)
Se puede modificar el tamaño del punto glPointSize(GLfloat tamaño)
Se obtiene un punto en forma de cuadrado con cara igual al argumento
Ejemplo// Recuperar el tamaño actual del punto
GLfloat antiguoTamaño;
glGetFloatv(GL_POINT_SIZE, &antiguoTamaño);
// Si el tamaño del punto es pequeño, se agranda (6.0), de lo contrario se mantiene
If(antiguoTamaño < 1.0) glPointSize(6.0);
else glPointSize(1.0);
Puntos (II)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática9
![Page 10: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/10.jpg)
Ejemplo: Círculo compuesto por puntosglBegin(GL_POINTS);
for(ANG = 0.0f; ANG < 2 * GL_PI; ANG += paso)
{
x = radio * fsin(ANG);
y = radio * fcos(ANG);
glVertex2f(x,y);
}
glEnd();
Puntos (III)
10
![Page 11: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/11.jpg)
Ejemplos – Puntos aleatorios en un planovoid CALLBACK RenderScene(void)
{
// Limpiamos la ventana con un color de fondo.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Guardamos el estado de la matriz y hacemos la rotación.
glPushMatrix();
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
/**********ZONA DE DIBUJO************/
//Dibujamos 50 puntos aleatorios en la pantalla.
//Los puntos están todos en el mismo plano (z=0)
glBegin(GL_POINTS);
for(int i=0;i<50;i++)
glVertex2f(puntos[i][0],puntos[i][1]);
glEnd();
// Recuperar transformaciones
glPopMatrix();
// Eliminar comandos de dibujado
glFlush();
}
Puntos (IV)
11
![Page 12: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/12.jpg)
Ejemplos – Puntos aleatorios en un plano Vista del plano que forman los puntos
Puntos (V)
12
![Page 13: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/13.jpg)
Dibujando líneas en 3D
13
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 14: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/14.jpg)
Líneas en 3D (I)
glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(20.0f, 20.0f, 20.0f);
glEnd();
Primitiva: GL_LINESLínea definida como trazo entre dos vértices
Puede agrupar tantos pares de vértices como se desee
Si el número de vértices es imparDesestimación del último vértice
Ejemplo:
14
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 15: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/15.jpg)
Líneas en 3D (II)
Series de líneas y trazos (I)Primitivas:
GL_LINE_STRIP
GL_LINE_LOOP
Permiten especificar una lista de vértices a través de los cuales dibujar una línea continua
Basadas en GL_LINES
15
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 16: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/16.jpg)
Líneas en 3D (III)
glBegin(GL_LINE_STRIP);glVertex3f(0.0f, 0.0f, 0.0f); // V0glVertex3f(40.0f, 40.0f, 0.0f); // V1glVertex3f(40.0f, 90.0f, 0.0f); // V2
glEnd();
V1
V0
V2
Series de líneas y trazos (II)GL_LINE_STRIP
Dibuja una línea de un vértice al siguiente en la lista
Un vértice se convierte en inicio y fin de una líneaExcepto el primer vértice (sólo inicio) y el último vértice (sólo fin)
Ejemplo:
16
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 17: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/17.jpg)
Series de líneas y trazos (III)GL_LINE_LOOP
Dibuja una línea de un vértice al siguiente en la lista
Un vértice se convierte en inicio y fin de una líneaIncluidos el primero y el último
Figura de líneas cerrada
Ejemplo:
Líneas en 3D (IV)
glBegin(GL_LINE_LOOP);glVertex3f(0.0f, 0.0f, 0.0f); // V0glVertex3f(40.0f, 40.0f, 0.0f); // V1glVertex3f(40.0f, 90.0f, 0.0f); // V2
glEnd();
V1
V0
V2
17
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 18: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/18.jpg)
Líneas en 3D (V)
Aproximación de curvas con líneas rectas (I)Alternativa a la construcción de curvas con puntos
Menos tedioso
Más sencillo e intuitivo
Utilización de la primitiva GL_LINE_STRIPPuntos más próximos Curva mejor definida
No es necesario especificar todos los puntos
18
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 19: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/19.jpg)
Líneas en 3D (VI)
//Llamar una única vez para todos los puntosglBegin(GL_LINE_STRIP);z = -50.0f;for(angulo=0.0f; angulo<=(2.0f*GL_PI)*3.0f; angulo+=0.1f){ x=50.0f*sin(angulo); y=50.0f*cos(angulo); //Especificar el punto y mover el valor de z //ligeramente hacia arriba glVertex3f(x, y, z); z+=0.5f;}glEnd();
Aproximación de curvas con líneas rectas (II)Ejemplo:
19
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 20: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/20.jpg)
Líneas en 3D (VII)
// Llamada para redibujar una escenavoid RenderScene(void){
GLfloat y;GLfloat fTam[2];GLfloat fTamAct; …//Almacenar el valor menor y mayor para anchoglGetFloatv(GL_LINE_WIDTH_RANGE,fTam);fTamAct=fTam[0];
// Subir 20 unidades en el eje Y cada líneafor(y=-90.0f; y<90.0f; y+=20.0f){
// Establecer el ancho de líneaglLineWidth(fTamAct);// Dibujar la líneaglBegin(GL_LINES);
glVertex2f(-80.0f, y);glVertex2f(80.0f, y);
glEnd();// Se incrementa el anchofTamAct += 1.0f;
}…
}
Ancho de líneasMétodo para cambiar el ancho o grosor de dibujo de líneas
void glLineWidth(GLfloat width);No todos los anchos son válidosEjemplo:
20
![Page 21: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/21.jpg)
Líneas en 3D (VIII)Líneas punteadas (I)
Dibujado de líneas basadas en un patrón punteado o rayadoActivación con glEnable(GL_LINE_STIPPLE);Establecer el patrón
void glLineStipple(GLint factor, GLushort patron);El patrón no es más que un valor de 16 bits
1 Dibujado; 0 Blanco
21
![Page 22: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/22.jpg)
Líneas en 3D (IX)
// Llamada para redibujar una escenavoid RenderScene(void){
GLfloat y;GLint factor=1;GLushort patron = 0x5555;…// Activar el punteadoglEnable(GL_LINE_STIPPLE);// Subir en el eje y 20 unidades cada vezfor(y=-90.0f; y<90.0f; y+=20.0f) {
// Establecer el patrónglLineSipple(factor, patron);// Dibujar la líneaglBegin(GL_LINES);
glVertex2f(-80.0f, y);glVertex2f(80.0f, y);
glEnd();factor++;
}…
}
Líneas punteadas (II)Ejemplo
22
![Page 23: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/23.jpg)
Polígonos
23
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática
![Page 24: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/24.jpg)
Aspectos teóricosPolígonos válidosEncaramientoAjustes de colorModos poligonales
Ejemplos prácticosTriángulos CuadriláterosPolígonos (más de 4 lados)
Índice Polígonos
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática24
![Page 25: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/25.jpg)
Características:Las aristas no se pueden cortarPolígonos convexos
Polígonos complejos como unión de polígonos simples.
Vértices en OpenGL son tridimensionalesLos puntos que forman los limites de un polígono no tienen por que estar en el mismo planoCambia el punto de vista, rotaciones -> dejar de ser polígono convexo simpleUtilización de triángulos sus vértices están siempre en el mismo plano
Polígonos válidos
Polígonos válidos Polígonos no válidos
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática25
![Page 26: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/26.jpg)
Determina la cara frontal y trasera del polígono
Se especifica en el orden en que
se definen los vérticesSentido contrario a las agujas del reloj (V0, V1, V2). Polígono encarado frontalmente.
Sentido de las agujas del reloj (V0, V2, V1). Polígono con encare posterior.
Función glFrontFace()
Encaramiento
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática26
![Page 27: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/27.jpg)
Los colores se especifican para cada vértice no para el polígono.
Efecto de degradado
Función glShadeModel(). Argumentos:GL_SMOOTH: por defecto.
GL_FLAT: color sólido del último vértice
Ajustes de color
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática27
![Page 28: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/28.jpg)
Representación de 3 formas distintas.
Función glPoligonMode(). 2 argumentos:Primero: qué caras se verán afectadas.
GL_FRONT
GL_BACK
GL_FRONT_AND_BACK
Segundo: representaciónGL_POINT: muestra sólo los vértices.
GL_LINE: muestra las aristas.
GL_FILL: muestra el polígono entero y relleno.
Modos poligonales
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática28
![Page 29: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/29.jpg)
Funciones glBegin() y glEnd()Macro GL_TRIANGLES
Vértices múltiplo de 3.
Ejemplo:Especifican vértices: V1, V2, V3, V4, V5, V6 y V7
Triángulos conectados: primitiva GL_TRIANGLE_STRIP.
Triángulos (I)
29
![Page 30: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/30.jpg)
Triángulos (II)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática30
![Page 31: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/31.jpg)
Similar a triángulos.Macro GL_QUADS.
Vértices múltiplo de 4.
Ejemplo:Especifican vértices: V1, V2, V3, V4, V5, V6, V7, V8 y V9.
Cuadriláteros conectados: 4 vértices más pares de puntos. Macro GL_QUAD_STRIP.
Cuadriláteros (I)
31
![Page 32: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/32.jpg)
Cuadriláteros (II)
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática32
![Page 33: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/33.jpg)
Funciones glBegin() y glEnd()
Aprovechan todos los vértices que se especifiquen.
Polígonos
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática33
![Page 34: Dibujar en 3D: puntos, líneas y polígonos. Informática gráfica Ingeniería Informática Antonio Lillo Sanz Carlos Muñoz Martín Javier Holguera Blanco Facultad](https://reader035.vdocuments.pub/reader035/viewer/2022062222/5665b4341a28abb57c8ff83b/html5/thumbnails/34.jpg)
¿Preguntas?
34
Informática gráfica
Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática