1 / 34

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

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. Índice general. Introducción

jihan
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • 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. V2 V1 V0 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: 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. V2 V1 V0 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: 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 • 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() • 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. • 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

More Related