La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Dibujar en 3D: puntos, líneas y polígonos.

Presentaciones similares


Presentación del tema: "Dibujar en 3D: puntos, líneas y polígonos."— Transcripción de la presentación:

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 de Ciencias - Departamento de Informática y Automática Universidad de Salamanca 2 de Mayo de 2007

2 Índice general Introducción Puntos Dibujando líneas en 3D Polígonos
Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

3 Introducción Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

4 Introducción OpenGL provee de acceso al hardware gráfico
Librería de renderizado a bajo nivel con amplio soporte hardware Basada en el uso de primitivas Se construyen figuras complejas a partir de ellas Puntos, líneas y polígonos, elementos básicos Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

5 Sistema de coordenadas (I)
Se debe especificar la relación coordenadas / pixels físicos de la pantalla Definición de la clipping area Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

6 Sistema de coordenadas (II)
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 Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

7 Puntos Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

8 Puntos (I) 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 Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

9 Puntos (II) Se puede modificar el tamaño del punto Ejemplo
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); Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

10 Puntos (III) Ejemplo: Círculo compuesto por puntos glBegin(GL_POINTS);
for(ANG = 0.0f; ANG < 2 * GL_PI; ANG += paso) { x = radio * fsin(ANG); y = radio * fcos(ANG); glVertex2f(x,y); } glEnd();

11 Puntos (IV) Ejemplos – Puntos aleatorios en un plano
void 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(); }

12 Puntos (V) Ejemplos – Puntos aleatorios en un plano
Vista del plano que forman los puntos

13 Dibujando líneas en 3D Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

14 Líneas en 3D (I) Primitiva: GL_LINES
Lí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 impar Desestimación del último vértice Ejemplo: glBegin(GL_LINES); glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(20.0f, 20.0f, 20.0f); glEnd(); Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

15 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 Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

16 Líneas en 3D (III) 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ínea Excepto el primer vértice (sólo inicio) y el último vértice (sólo fin) Ejemplo: V1 V0 V2 glBegin(GL_LINE_STRIP); glVertex3f(0.0f, 0.0f, 0.0f); // V0 glVertex3f(40.0f, 40.0f, 0.0f); // V1 glVertex3f(40.0f, 90.0f, 0.0f); // V2 glEnd(); Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

17 Líneas en 3D (IV) 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ínea Incluidos el primero y el último Figura de líneas cerrada Ejemplo: V1 V0 V2 glBegin(GL_LINE_LOOP); glVertex3f(0.0f, 0.0f, 0.0f); // V0 glVertex3f(40.0f, 40.0f, 0.0f); // V1 glVertex3f(40.0f, 90.0f, 0.0f); // V2 glEnd(); Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

18 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_STRIP Puntos más próximos  Curva mejor definida No es necesario especificar todos los puntos Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

19 Líneas en 3D (VI) Aproximación de curvas con líneas rectas (II)
Ejemplo: //Llamar una única vez para todos los puntos glBegin(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(); Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

20 Líneas en 3D (VII) Ancho de líneas
Método para cambiar el ancho o grosor de dibujo de líneas void glLineWidth(GLfloat width); No todos los anchos son válidos Ejemplo: // Llamada para redibujar una escena void RenderScene(void) { GLfloat y; GLfloat fTam[2]; GLfloat fTamAct; //Almacenar el valor menor y mayor para ancho glGetFloatv(GL_LINE_WIDTH_RANGE,fTam); fTamAct=fTam[0]; // Subir 20 unidades en el eje Y cada línea for(y=-90.0f; y<90.0f; y+=20.0f) // Establecer el ancho de línea glLineWidth(fTamAct); // Dibujar la línea glBegin(GL_LINES); glVertex2f(-80.0f, y); glVertex2f(80.0f, y); glEnd(); // Se incrementa el ancho fTamAct += 1.0f; }

21 Líneas en 3D (VIII) Líneas punteadas (I)
Dibujado de líneas basadas en un patrón punteado o rayado Activació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

22 Líneas en 3D (IX) Líneas punteadas (II) Ejemplo
// Llamada para redibujar una escena void RenderScene(void) { GLfloat y; GLint factor=1; GLushort patron = 0x5555; // Activar el punteado glEnable(GL_LINE_STIPPLE); // Subir en el eje y 20 unidades cada vez for(y=-90.0f; y<90.0f; y+=20.0f) // Establecer el patrón glLineSipple(factor, patron); // Dibujar la línea glBegin(GL_LINES); glVertex2f(-80.0f, y); glVertex2f(80.0f, y); glEnd(); factor++; }

23 Polígonos Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

24 Índice Polígonos Aspectos teóricos Ejemplos prácticos
Polígonos válidos Encaramiento Ajustes de color Modos poligonales Ejemplos prácticos Triángulos Cuadriláteros Polígonos (más de 4 lados) Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

25 Polígonos válidos Características:
Las aristas no se pueden cortar Polígonos convexos Polígonos complejos como unión de polígonos simples. Vértices en OpenGL son tridimensionales Los puntos que forman los limites de un polígono no tienen por que estar en el mismo plano Cambia el punto de vista, rotaciones -> dejar de ser polígono convexo simple Utilización de triángulos sus vértices están siempre en el mismo plano 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ática

26 Encaramiento Determina la cara frontal y trasera del polígono
Se especifica en el orden en que se definen los vértices Sentido 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() Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

27 Ajustes de color 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 Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

28 Modos poligonales 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ón GL_POINT: muestra sólo los vértices. GL_LINE: muestra las aristas. GL_FILL: muestra el polígono entero y relleno. Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

29 Triángulos (I) Funciones glBegin() y glEnd() Vértices múltiplo de 3.
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.

30 Triángulos (II) Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

31 Cuadriláteros (I) Similar a triángulos. Vértices múltiplo de 4.
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.

32 Cuadriláteros (II) Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática

33 Polígonos Funciones glBegin() y glEnd()
Aprovechan todos los vértices que se especifiquen. Informática gráfica Ingeniería Informática Facultad de Ciencias - Departamento de Informática y Automática

34 ¿Preguntas? Informática gráfica Ingeniería Informática
Facultad de Ciencias - Departamento de Informática y Automática


Descargar ppt "Dibujar en 3D: puntos, líneas y polígonos."

Presentaciones similares


Anuncios Google