Story Transcript
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal Jos´e Ribelles
SIU020 Inform´ atica Gr´ afica y Animaci´ on Departamento de Lenguajes y Sistemas Inform´ aticos, Universitat Jaume I
Tema 1: Modelado poligonal
1
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos...
1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL
Introducci´ on
Tema 1: Modelado poligonal
2
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Introducci´on Modelado poligonal Se denomina modelo al conjunto de datos que describe a un objeto y que puede ser utilizado por un sistema gr´afico para ser visualizado. Modelado poligonal es cuando se utilizan pol´ıgonos para describir la geometr´ıa. El tri´angulo es la primitiva m´as utilizada.
Introducci´ on
Tema 1: Modelado poligonal
3
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Introducci´on Ventajas Exactitud visual. Velocidad.
Introducci´ on
Tema 1: Modelado poligonal
4
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Introducci´on
Conceptos Teselado: proceso de divisi´ on de un pol´ıgono en pol´ıgonos m´as peque˜ nos. Triangulaci´ on: proceso de divisi´ on de un pol´ıgono de n lados en tri´angulos (caso particular de teselado). Consolidaci´ on: conjunto de operaciones u ´tiles para almacenamiento y dibujado del modelo. Optimizaci´ on: proceso por el que se agrupan u ordenan los datos con el fin de dibujarse de manera m´as r´apida. Simplificaci´ on: proceso por el que se elimina informaci´on que bajo alg´ un criterio resulte innecesaria o insignificante.
Introducci´ on
Tema 1: Modelado poligonal
5
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos...
1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL
Or´ıgenes de informaci´ on poligonal
Tema 1: Modelado poligonal
6
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Or´ıgenes de informaci´on poligonal
Posibles fuentes Describir la geometr´ıa a mano. Modelado procedural: programas que generan la geometr´ıa. Transformar datos de modelos de superficies o volum´etricos. Programas de modelado. Muestreo de un modelo real, digitalizador 3D. Fotogrametr´ıa: reconstrucci´ on 3D a partir de im´agenes. Escaner 3D.
Or´ıgenes de informaci´ on poligonal
Tema 1: Modelado poligonal
7
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos... 1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on Caras independientes V´ertices compartidos Tiras y abanicos de tri´angulos
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL
Representaci´ on
Tema 1: Modelado poligonal
8
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Mallas de tri´angulos Una malla representa una superficie donde v´ertices y aristas se comparten. La mayor parte de los modelos lo forman mallas de tri´angulos.
Representaci´ on
Tema 1: Modelado poligonal
9
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Mallas de tri´angulos
Es importante representarlos de manera eficiente para: Reducir el espacio de almacenamiento. Reducir el consumo de ancho de banda. Reducir el tiempo de dibujado.
Tipos de representaci´ on: Caras independientes. V´ertices compartidos. Tiras y abanicos de tri´ angulos. Representaci´ on
Tema 1: Modelado poligonal
10
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Caras independientes
(x3, y3, z3)
Cada cara almacena sus v´ertices.
{
F3
F1 F0
struct triangulo
(x0, y0, z0)
(x5, y5, z5)
(x4, y4, z4)
F2
(x1, y1, z1)
(x2, y2, z2)
vector3 coordenadas [ 3 ] ; } Triangulos [ nTriangulos ] ;
Triangulos[] = { { x0, y0, z0, x1, y1, z1, x3, y3, z3 }, { x1, y1, z1, x4, y4, z4, x3, y3, z3 }, { x1, y1, z1, x2, y2, z2, x4, y4, z4 }, { x2, y2, z2, x5, y5, z5, x4, y4, z4 } }
Representaci´ on
Tema 1: Modelado poligonal
11
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
V´ertices compartidos
Cada cara almacena ´ındices a una lista de v´ertices.
(x3, y3, z3)
F3
F1 F0 struct vertice
(x5, y5, z5)
(x4, y4, z4)
F2
{
f l o a t coordenadas [ 3 ] ;
(x0, y0, z0)
(x1, y1, z1)
(x2, y2, z2)
} Vertices [ nVertices ] ; struct triangulo
{
unsigned i n t i n d i c e s [ 3 ] ; } Triangulos [ nTriangulos ] ;
Representaci´ on
Vertices[] = { {x0, y0, z0}, {x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}, {x4, y4, z4}, {x5, y5, z5} }
Tema 1: Modelado poligonal
Triangulos[] = { { 0, 1, 3 }, { 1, 4, 3 }, { 1, 2, 4 }, { 2, 5, 4 } }
12
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Tiras y abanicos de tri´angulos Incremento de prestaciones al enviar grupos de tri´angulos que comparten v´ertices, ¿por qu´e se produce?, ¿se produce siempre?, ¿qu´e podemos concluir? v3
v3
v0
v0
v4 v1
v4 v1
v5 v2 TiraTriangulos[] = { 0, 3, 1, 4, 2, 5 } v5 v2 AbanicoTriangulos[] = { 1, 0, 3, 4, 5, 2 } Representaci´ on
Tema 1: Modelado poligonal
13
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos...
1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL
La Normal
Tema 1: Modelado poligonal
14
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
La Normal Es habitual que para cada v´ertice se almacenen atributos como el color, la normal o las coordenadas de textura. Estos atributos se interpolan a trav´es de cada tri´angulo para definir una funci´ on continua sobre el total de la superficie de la malla. Y son necesarios para mejorar significativamente la calidad visual.
La Normal
Tema 1: Modelado poligonal
15
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
La Normal Uno de los atributos m´as importantes es la Normal. La normal es un vector perpendicular a la superficie en un punto, ¿c´ omo obtenerla? Ya que el producto vectorial no es commutativo, hay que establecer un orden y obtener todas las normales de manera consistente.
La Normal
Tema 1: Modelado poligonal
16
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos...
1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL
Consolidaci´ on
Tema 1: Modelado poligonal
17
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Consolidaci´on
Operaciones habituales Merging: transformar pol´ıgonos que est´an almacenados como separados en una malla poligonal, ¿por qu´e? ¿c´ omo? Orientaci´ on: hacer que las caras est´en todas definidas en el mismo sentido, ¿por qu´e? ¿c´ omo? Solidez: averiguar si solo un lado de la malla es visible, ¿por qu´e? ¿c´ omo? Normales: calcular las normales en cada v´ertice, ¿por qu´e? ¿c´omo? ¿y qu´e ocurre en los pliegues?
Consolidaci´ on
Tema 1: Modelado poligonal
18
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Ejercicio
Describe un modelo poligonal de un Cubo de lado 1 centrado en el origen de coordenadas. Dib´ ujalo en papel. Obten la lista de v´ertices y la de tri´angulos. Ten cuidado y define todas sus caras en el mismo orden. ¿Cu´antos v´ertices te salen? A˜ nade ahora las normales para cada v´ertice. ¿Tienes el mismo n´ umero de v´ertices?
Consolidaci´ on
Tema 1: Modelado poligonal
19
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Hoy veremos... 1
Introducci´ on
2
Or´ıgenes de informaci´ on poligonal
3
Representaci´ on
4
La Normal
5
Consolidaci´ on
6
Pol´ıgonos y OpenGL Primitivas geom´etricas Modelado Visualizaci´ on
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
20
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Primitivas geom´etricas OpenGL no proporciona mecanismos para describir o modelar objetos geom´etricos complejos, sino que proporciona mecanismos para especificar c´ omo dichos objetos deben ser dibujados. El punto, el segmento de l´ınea y el tri´angulo. Cada primitiva se define especificando sus respectivos v´ertices. Dibujo de puntos: gl.POINTS
Dibujo de l´ıneas: Segmentos sueltos: gl.LINES Secuencia o tira de segmentos: gl.LINE STRIP Secuencia cerrada de segmentos: gl.LINE LOOP
Tri´ angulos Tri´ angulos sueltos: gl.TRIANGLES Tira de tri´ angulos: gl.TRIANGLE STRIP Abanico de tri´ angulos: gl.TRIANGLE FAN
Las primitivas geom´etricas se forman agrupando v´ertices, y estas se agrupan a su vez para definir objetos de mayor complejidad. Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
21
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Modelado Solemos asociar el concepto de v´ertice con las coordenadas. El concepto de v´ertice es m´as general entendi´endose como una agrupaci´ on de datos llamados atributos. Los atributos m´as utilizados son la posici´ on, la normal y el color. El programador puede incluir como atributo cualquier informaci´on. Como OpenGL requiere que la informaci´ on que vaya a visualizarse se disponga en vectores...
struct vertice { GLfloat coordenadas [ 3 ] ; GLfloat color [ 3 ] ; } Vertices [ nVertices ] ; struct triangulo { GLuint i n d i c e s [ 3 ] ; } Triangulos [ nTriangulos ] ;
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
22
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Visualizaci´on
Tres pasos previos: 1 2
3
Almacenar el modelo poligonal en buffer objects. Obtener los ´ındices de las variables del Shader que representan los atributos de los v´ertices. Especificar para cada atributo d´ onde y c´ omo se encuentran almacenados as´ı como habilitar los vectores correspondientes.
Dibujar indicando tipo de primitiva y n´ umero de elementos. Listado 1: Paso 1 idVerticesBuffer = gl . createBuffer () ; g l . b i n d B u f f e r ( g l . ARRAY BUFFER , i d V e r t i c e s B u f f e r ) ; g l . b u f f e r D a t a ( g l . ARRAY BUFFER , new F l o a t 3 2 A r r a y ( V e r t i c e s ) , g l . STATIC DRAW) ; idIndicesBuffer = gl . createBuffer () ; g l . b i n d B u f f e r ( g l . ELEMENT ARRAY BUFFER , i d I n d i c e s B u f f e r ) ; g l . b u f f e r D a t a ( g l . ELEMENT ARRAY BUFFER , new U i n t 1 6 A r r a y ( T r i a n g u l o s ) , g l . STATIC DRAW) ;
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
23
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Visualizaci´on Listado 2: Paso 2 attribute attribute
vec3 p o s i c i o n ; vec3 c o l o r ;
varying
vec4 n ue v o Co l o r ;
v o i d main ( ) { nuevoC ol o r = vec4 ( c o l o r , 1 . 0 ) ; g l P o s i t i o n = vec4 ( p o s i c i o n , 1 . 0 ) ; } p r e c i s i o n mediump f l o a t ; varying vec4 nuevoColor ; v o i d main ( v o i d ) { gl FragColor = nuevoColor ; } . . . // c o m p i l a y e n l a z a e l S h a d e r v e r t e x P o s i t i o n A t t r i b u t e = g l . g e t A t t r i b L o c a t i o n ( program , ” p o s i c i o n ” ) ; vertexColorAttribute = g l . g e t A t t r i b L o c a t i o n ( program , ” c o l o r ” ) ;
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
24
Introducci´ on
Or´ıgenes de informaci´ on poligonal
Representaci´ on
La Normal
Consolidaci´ on
Pol´ıgonos y OpenGL
Visualizaci´on
Listado 3: Paso 3 y dibujado g l . b i n d B u f f e r ( g l . ARRAY BUFFER , i d V e r t i c e s B u f f e r ) ; g l . v e r t e x A t t r i b P o i n t e r ( v e r t e x P o s i t i o n A t t r i b u t e , 3 , g l . FLOAT , f a l s e , 2∗3∗4 , 0 ) ; gl . vertexAttribPointer ( vertexColorAttribute , 3 , g l . FLOAT , f a l s e , 2∗3∗4 , 3∗4) ; gl . enableVertexAttribArray ( vertexPositionAttribute ) ; gl . enableVertexAttribArray ( vertexColorAttribute ) ; g l . b i n d B u f f e r ( g l . ELEMENT ARRAY BUFFER , i d I n d i c e s B u f f e r ) ; g l . d r a w E l e m e n t s ( g l . TRIANGLES , n T r i a n g u l o s ∗3 , g l . UNSIGNED SHORT , 0 ) ;
Pol´ıgonos y OpenGL
Tema 1: Modelado poligonal
25