32
OpenGL Modulo 2E: - transformações - cores - luz Marcus G. Pivatto

OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Embed Size (px)

Citation preview

Page 1: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

OpenGL

Modulo 2E: - transformações

- cores

- luz

Marcus G. Pivatto

Page 2: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Conteúdo

• realidade virtual ? (linguagens 3D & resultados)

• projeções e seus efeitos

• rotação, translação, escala

• animação, problemas hardware/software

• atribuição de cores

• definições de luz

Page 3: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

• TITLE: warm_up Megapov 0.7

• NAME: Norbert Kern, Germany

• TOPIC: Insects and Spiders

• PARSE: 11min 40s TRACE: 101 h 18 min MEMORY: 1110 MB peak

• HARDWARE USED: 1,4 GHz Athlon C / 1 GB RAM

Page 4: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

• TITLE: The wet bird

• NAME: Gilles Tran, France

• TOPIC: City

• RENDER TIME: 21 h

• HARDWARE USED: Pentium II 350

• Megapov 0.4

Page 5: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

M.C. Escher (1898- 1972)

• A Dutch graphic artist, most recognized for spatial illusions, impossible buildings, repeating geometric patterns (tessellations), and his incredible techniques in woodcutting and lithography.

Page 6: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Projeções

• visão percepção• real virtual• 2D 3D

• TITLE: That's Impossible

• NAME: Joe Wise• COUNTRY: USA

Page 7: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Ortogonal

• A Projeção Ortogonal é selecionada pelo comando glOrtho e utiliza seis parâmetros que definem um volume de visão.

glOrtho(left,right,bottom,top,near,far);

Page 8: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Perspectiva

• A percepção das distâncias entre os objetos e o ponto de visão é o efeito característico da projeção em perspectiva.

• Comando glFrustum, define o volume de visão em forma de tronco de pirâmide ( frustum ).

glFrustrum(left,right,bottom,top,near,far); ou gluPerspective(angle,aspect,near,far);

Page 9: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Exemplo - Ortogonal

• Observar o sentido de rotação do disco colorido!

Page 10: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Exemplo - Perspectiva

• Observar o sentido de rotação do disco colorido!

Page 11: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Transformações - Comandos

• Translação

• Rotação

• Escala

• Reinicialização

• Armazenar e restaurar um

“estado de transformação” anterior.

Page 12: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Estado de Transformação

• A idéia central as transformações em OpenGL é que elas são cumulativas, ou seja, podem ser aplicadas umas sobre as outras.

• Uma transformação geométrica de OpenGL é armazenada internamente em uma matriz. A cada tranformação esta matriz é alterada e usada para desenhar os objeto a aprtir daquele momento, até que seja novamente alterada.

Page 13: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Matrizes de Transformação

• O OpenGL mantém três matrizes de transformação:

ModelView, Projection e ViewPoint

que são usadas para transformar um vértice qualquer dado em um ponto da janela de visualização.

• Cada vértice especificado é multiplicado por estas três

Page 14: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Pipeline de Transformação

• glMatrixMode executado com uma das constantes:

GL_MODELVIEW, GL_PROJECTION ou GL_TEXTURE.

Page 15: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

O GL_Fotógrafo

• Arrumar o tripé e posicionar a câmera para fotografar a cena - equivalente a especificar as transformações de visualização

( função gluLookAt );

• Arrumar a cena para ser fotografada, incluindo ou excluindo objetos/pessoas - equivalente à etapa de modelagem (inclui as tranformações geométricas, glTranslatef, glScalef, glRotatef, e o desenho dos objetos);

• Escolher a lente da câmera ou ajustar o zoom - equivalente a especificar as transformações de projeção ( função gluPerspective );

• Determinar o tamanho final da foto (maior ou menor) - equivalente a especificar a viewport (funções glViewport e ChangeSize).

Page 16: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Exemplo de Código

glMatrixMode( GL_MODELVIEW ); // Define a Matriz alvo

glLoadIdentity(); // re-inicializa a matriz

DesenhaObjeto(); // Desenha o objeto na posição // correspondente às suas coordenadas // originais                

glTranslatef(10,10,10);

DesenhaObjeto(); // Desenha o objeto descolado de 10                 // unidades em cada eixo

glTranslatef(10,10,10);

DesenhaObjeto(); // Desenha o objeto descolado de 20 // unidades em cada eixo // LEMBRE-SE, AS TRANSFORMAÇÕES SÃO // CUMULATIVAS

Page 17: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Transformações - Translação

    Para efetuar uma translação há o comando:

glTranslatef(tx, ty, tz)

que move todas as coordenadas dos objetos ao longo dos eixos coordenados.

Page 18: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Transformações - Rotação

   Para efetuar uma rotação há o comando:

glRotatef(Angulo, x, y, z)

que gira o objeto ao redor do vetor (x,y,z). O giro é de Angulo graus, no sentido anti-horário.

Page 19: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Transformações - Escala

  Para efetuar uma escala há o comando:

glScalef(ex, ey, ez)

que altera a escala do objeto ao logo dos eixos coordenados.

Page 20: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Reinicializando as Tranformações

   Para permitir que a transformação atual seja reinicializada há o comando:

glLoadIdentity().

Page 21: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Limitando o escopo das Tranformações

  Para permitir que uma transformação valha somente em um certo trecho de prograam e assim não altere o que está sendo desenhado depois, há os comados:

glPushMatrix() e glPopMatrix().

A idéia é que o glPushMatriz armazene as

transformações atuais em um pilha interna do OpenGL e que estas transformações possam ser retiradas depois por um glPopMatriz.

Page 22: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Exercício 1

Inserir os comandos:

glLoadIdentity

glPushMatrix

glPopMatrix

glRotatef

glTransalef

adequadamente no código

fornecido, de maneira a obter

um disco branco, girando

como uma moeda sobre a

mesa.

Page 23: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Cor – Conceitos Básicos

Page 24: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Cor – Comandos Básicos

• glClearColor(1.0f, 0.0f, 0.0f, 0.0f);define a cor ( Red, Green, Blue, Alpha ) utilizada ao se apagar a janela

• glClear(GL_COLOR_BUFFER_BIT);apaga a janela com a cor definida em glGlearColor

• glColor3f(1.0f, 0.0f, 0.0f);define a cor ( Red, Green, Blue ) com a qual os próximos objetos serão desenhados

Page 25: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Cada vértice tem cor própria !

glBegin( GL_TRIANGLES );

// red glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.000f, 1.000f, -5.000f);

// green glColor3f(0.0f,1.0f,0.0f); glVertex3f(-0.866f, -0.500f,-5.000f);

// blue glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0.866f, -0.500f, -5.000f);

glEnd();

Page 26: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Vsync?

f H = 96kHz

horizontal scanning frequency

Vres = 768 pixel

Hres = 1024 pixel

Refresh rate = f H / Hres * 0.95

= 89 Hz

Vsync

Page 27: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

LuzOpenGL considera que a luz é dividida em quatro componentes independentes:

• Ambiente: resultado da luz refletida no ambiente; é uma luz que vem de todas as direções;

• Difusa: luz que vem de uma direção, atinge a superfície e é refletida em todas as direções; assim, parece possuir o mesmo brilho independente de onde a câmera está posicionada;

• Especular: luz que vem de uma direção e tende a ser refletida numa única direção;

• Emissiva: simula a luz que se origina de um objeto; a cor emissiva de uma superfície adiciona intensidade ao objeto, mas não é afetada por qualquer

fonte de luz; ela também não introduz luz adicional da cena.

Page 28: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Materiais• A cor do material de um objeto depende da porcentagem

de luz vermelha, verde e azul incidente que ele reflete.

Para determiná-la deve-se multiplicar o coeficiente de reflexão (MR, MG, MB) do material pelos componentes (LR, LG, LB) de intensidade da luz incidente.

luz que chega no observador é dada por:

(LR.MR, LG.MG, LB.MB)

Page 29: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Efeito da luz sobre o objeto

Abaixo o memo modelo com todos parâmetros de luz definidos

Page 30: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Parâmetros de luz• glEnable(GL_LIGHTING); habilita a iluminação

GL_COLOR_MATERIAL atribui a cor para o material a partir da cor corrente

• glShadeModel(GL_SMOOTH); estabelece o modelo de tonalização

(GL_FLAT, GL_SMOOTH)

• glMaterialfv(GL_FRONT, GL_SPECULAR, especularidade); estabelece os parâmetros do material que serão usados pelo modelo de iluminação

(GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS, GL_AMBIENT_AND_DIFFUSE ou GL_COLOR_INDEXES)

Page 31: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Parâmetros de luz – cont.• glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);

estabelece os parâmetros do modelo de iluminação usado por OpenGL (GL_LIGHT_MODEL_AMBIENT,

GL_LIGHT_MODEL_LOCAL_VIEWER ou GL_LIGHT_MODEL_TWO_SIDE;)

• glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente); estabelece os parâmetros da fonte de luz para uma das oito fontes de luz disponíveis de GL_LIGHT0 a GL_LIGHT7

(GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF. GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION);

Page 32: OpenGL Modulo 2E:- transformações - cores - luz Marcus G. Pivatto

Bibliografia / ReferênciasSites diversos:• http://www.worldofescher.com ( World of Escher )• http://www.irtc.org ( Internet Raytracing Competition )• http://www.povaray.org ( Persistence of Vision Raytracer )

Páginas de Professores:• http://www.inf.pucrs.br/~manssour/OpenGL/index.html• http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/OpenGL.html• http://www.cesec.ufpr.br/~mcunha/opengl/• http://astronomy.swin.edu.au/~pbourke/opengl/

Documentos e Livros:• The OpenGL Graphic System: A Specification ( Version 1.4 )• The OpenGL Graphics System Utility Library ( Version 1.3 )• The OpenGL Utility Toolkit Programming Interface ( API Version 3 )• OpenGL Reference Manual 2nd. ed. ( Version 1.1 )