Computação Gráfica OpenGL 05 3D

Documentos relacionados
Computação Gráfica OpenGL 05 3D

Computação Gráfica - 13

Computação Gráfica - 13

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

Iluminação em OpenGL. André Tavares da Silva.

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Computação Gráfica - OpenGl 02

Transformações geométricas

2º Exame. Computação Gráfica

Como Fazer um Programa, simples, em OpenGL para Trabalhar com Iluminação (exemplo do site da Isabel Mansour)

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

Paulo Sérgio Rodrigues. Exercícios de Laboratório

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

1º Exame. Computação Gráfica

1º Exame. Computação Gráfica

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

Introdução à Computação Gráfica Iluminação. Claudio Esperança Paulo Roma Cavalcanti

Computação Gráfica - 04

Disciplina: Computação Gráfica Prof. Dr. Paulo R. G. Luzzardi. Universidade Católica de Pelotas Centro Politécnico Ciência da Computação

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

CG 2015/2016 Segundo Teste LEIC Alameda/Taguspark. Segundo Teste. 18 de Novembro de 2015

Sist. Coordenadas Câmera (SCC)

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Visualização. - Aula 4 -

Computação Gráfica - 13

Projeções e Transformações em 3D

Projeções e Visualização

OpenGL. Alberto B. Raposo

Rendering de Polígonos. Determinação de Superfícies Visíveis. Back Face Culling. Back Face Culling. Back Face Culling. Back Face Culling.

Iluminação (lighting) e Sombreamento (shading)

Introdução ao OpenGL

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

3D no OpenGL. Visualização e Transformações Perspectiva. Transformações do Modelview. Processo

Computação Gráfica. Iluminação

Computação Gráfica OpenGl 01

Computação Gráfica. Iluminação

Computação Gráfica II

Fundamentos de Computação Gráfica. Iluminação

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

Computação Gráfica - 09

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

Computação Gráfica 09

Computação Gráfica - 09

Computação Gráfica OpenGl 03

7. Projeções Geométricas e Visualização 3D

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda/Taguspark. 1º Exame 29 Junho de 2010

Visibilidade. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 7 Apontamentos CG

COMPUTAÇÃO GRÁFICA - PROF. MSC. LEANDRO TONIETTO SELEÇÃO DE OBJETOS EM OPENGL - SELECT BUFFER

Autodesk 3ds Max - Primitivas

PEF 5743 Computação Gráfica Aplicada à Engenharia de Estruturas

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Exame de Recurso 29 de Junho de 2011

8. Síntese de Imagens: Cálculo de Cor

Desenvolvimento de jogos tridimensionais com OpenGL. Bruno Pereira Evangelista

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

Iluminando o Cenário

INTRODUÇÃO A OPENGL. Computação Gráfica

- INF Remoção de faces ocultas Aula 21

Modelo Hierárquico & Transformações Geométricas

Computação Gráfica - 13

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

Transcrição:

Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica OpenGL 05 3D Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Visualização em 3D Para visualizar uma determinada cena em 3D é análogo a tirar uma fotografia com uma máquina fotográfica, o que inclui os seguintes passos: Arrumar o tripé e posicionar a câmera para fotografar a cena. (LookAt). Arrumar a cena para ser fotografada, incluindo ou excluindo objetos/pessoas. Equivalente à etapa de modelagem (inclui as transformações geométricas, gltranslatef, glscalef, glrotatef, e o desenho dos objetos); Página 2

Visualização em 3D Posição da Câmera e para onde ela está direcionada: glulookat(eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z); up_x, up_y, up_z Indicam o vetor que aponta para o lado de cima do objeto Página 3

Visualização em 3D Para visualizar uma determinada cena em 3D... (cont.). Escolher a lente da câmera ou ajustar o zoom Equivalente a especificar as transformações de projeção. gluperspective(ângulo, aspecto, perto, longe); glortho(esquerda, direita, baixo, cima, perto, longe); Página 4

Visualização em 3D Para visualizar uma determinada cena em 3D... (cont.). Determinar o tamanho final da foto (maior ou menor); Equivalente a especificar a viewport, informando como parâmetros o canto inferior esquerdo, a largura e a altura da janela. glviewport(0, 0, largura, altura) Página 5

Visualização em 3D A OpenGl mantém matrizes de transformação ModelView, Projection e ViewPoint, para transformar qualquer ponto dado em um ponto na janela de visualização (ortho ou perspective). O comando glmatrixmode deverá ser utilizado antes dos comandos que especificam a forma da projeção. (GL_PROJECTION) avisa a OpenGL que todas as futuras alterações, tais como operações de escala, rotação e translação, irão afetar a "câmera" (ou observador). (GL_MODELVIEW) - avisa a OpenGL que todas as futuras alterações, tais como operações de escala, rotação e translação, irão afetar os modelos da cena (=o que é desenhado). A função glloadidentity(); chamada em seguida, faz com que a matriz corrente seja inicializada com a matriz identidade (nenhuma transformação é acumulada). Página 6

Visualização em 3D Exemplo: // Especifica sistema de coordenadas de projeção glmatrixmode(gl_projection); // Inicializa sistema de coordenadas de projeção glloadidentity(); // Especifica a projeção perspectiva // (angulo, aspecto, zmin, zmax) gluperspective(angle,faspect,0.5,1000); // Especifica sistema de coordenadas do modelo glmatrixmode(gl_modelview); // Inicializa sistema de coordenadas do modelo glloadidentity(); gltranslatef(-obsx,-obsy,-obsz); glrotatef(rotx,1,0,0); glrotatef(roty,0,1,0); http://migre.me/mwqmp Página 7

Primitivas 3D no OpenGL A biblioteca GLUT também possui diversas funções para desenhar objetos 3D. Ex: glutwireteapot(gldoouble size), glutwirecube(gldouble size); glutwiresphere(gldouble radius, GLint slices, GLint stacks). Todas estas funções também podem ser usadas para desenhar objetos sólidos, ao invés de exibir apenas o seu wire-frame. Para isto, basta substituir a substring Wire do nome da função por Solid. Por exemplo, se substituirmos a chamada à função glutwireteapot(50.0f) por glutsolidteapot(50.0f) Exemplo1 - http://migre.me/mwr3j Exemplo2 - http://migre.me/mwrew Página 8

Primitivas 3D no OpenGL Esferas void glutsolidsphere(gldouble radius, GLdouble slices, GLdouble stack ) void glutwiresphere(gldouble radius, GLdouble slices, GLdouble stack) void glutsolidcube (GLdouble size ) void glutwirecube (GLdouble size) Cubos Cones void glutsolidcone(gldouble base, GLdouble height, Glint slices, Glint stacks) void glutwirecone(gldouble base, GLdouble height, Glint slices, Glint stacks) Torus void glutsolidtorus(gldouble innerradius, GLdouble outerradius, Glint nsides, Glint rings) void glutwiretorus(gldouble innerradius, GLdouble outerradius, Glint nsides, Glint rings) Página 9

Primitivas 3D no OpenGL Os parâmetros slices e stacks que aparecem no protótipo de algumas funções, significam, respectivamente, o número de subdivisões em torno do eixo z (como se fossem linhas longitudinais) e o número de subdivisões ao longo do eixo z (como se fossem linhas latitudinais). Já rings e nsides correspondem, respectivamente, ao número de seções que serão usadas para formar o torus, e ao número de subdivisões para cada seção. Ver Exemplo padrão do Dev C++ (Criar um projeto novo do tipo multimídia, glut). Página 10

Primitivas 3D no OpenGL Dodecaedro FIGURA Tetraedro FIGURA void glutsoliddodecahedron () void glutsolidtetrahedron() void glutwiredodecahedron () void glutwiretetrahedron() Icosaedro FIGURA Teapot FIGURA void glutsolidicosahedron() void glutsolidteapot (GLdouble size); void glutwireicosahedron() void glutwireteapot (GLdouble size); Página 11

Z-Buffer Z-buffer Buffers são áreas reservadas de memória utilizadas para determinados propósitos. Em aplicações de animação, por exemplo, o double-buffer permite que as sucessivas renderizações sejam feitas de modo suave, sem o efeito indesejável de piscar entre cada atualização da janela de visualização. O z-buffer é bastante comum em aplicações gráficas e é utilizado para calcular a distância do observador e remover superfícies ou partes ocultas de objetos sobrepostos. glutinitdisplaymode(glut_double GLUT_RGB GLUT_DEPTH) Página 12

Iluminação em OpenGl Definindo os modelos de tonalização (Flat e Gouraud) glshademodel(glenum mode); GL_FLAT A cor não varia GL_SMOOTH Gouraud, calcula a cor a partir de cada vértice. A luz é dividida em quatro componentes que juntas formam o modelo de iluminação Ambiente luz que vem de todas as direções Difusa luz direcional que é ao atingir uma superfície é refletida em todas as direções Especular - luz direcional que é ao atingir uma superfície tende a refletir em uma única outra direção Emissiva simula a luz que se origina em um objeto. Não é interferida nem interfere no modelo de iluminação Página 13

Iluminação em OpenGl A iluminação é resultado das propriedades especificadas para as fontes de luz e das propriedades dos materiais que constituem os objetos Fontes de Luz gllightmodefv(glenum pname, TYPE *param) void gllightfv(glenum light, GLenum pname, TYPE *param); Objetos void glmaterialfv(glenum face, GLenum pname, TYPE *param); Página 14

Iluminação em OpenGl Propriedades do modelo da iluminação void gllightmodelfv(glenum pname, TYPE *param); pname define a característica do modelo de iluminação (valores abaixo) param vetor Glfloat com os valores do tipo especificado em pname Constante GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LIGHT_MODEL_COLOR_CONTROL Significado Intensidade ambiente RGBA de toda cena. Como é feito o processamento dos ângulos de reflexão especular Escolha entre a iluminação de um lado ou dos dois lados da face. Indica quando a reflexão especular é processada separadamente da ambiente e da difusa. Página 15

Iluminação em OpenGl Propriedades da fonte de luz void gllightfv(glenum light, GLenum pname, TYPE *param); ligth fonte de luz desejada. GL_LIGHT0 a GL_LIGHT7 pname característica da luz a ser especificada param vetor Glfloat com os valores do tipo especificado em pname Constante Valor default Significado GL_AMBIENT (0.0,0.0,0.0,1.0) Cor ambiente da luz GL_DIFFUSE (1.0,1.0,1.0,1.0) Cor difusa da luz GL_SPECULAR (1.0,1.0,1.0,1.0) Cor especular da luz GL_POSITION (0.0,0.0,1.0,0.0) Posição da luz GL_SPOT_DIRECTION (0.0,0.0,-1.0) Direção da luz spot GL_SPOTCUTOFF 180.0 Ângulo de corta da luz spot Página 16

Iluminação em OpenGl Propriedades de iluminação do material void glmaterialfv(glenum face, GLenum pname, TYPE *param); face quais faces do objeto estão sendo especificadas. GL_FRONT, GL_BACK ou GL_FRONT_AND_BACK pname propriedade do material a ser especificada param vetor Glfloat com os valores da propriedade especificada. Constante (Pname) Valor default Significado GL_AMBIENT (0.2,0.2,0.2,1.0) Cor ambiente do material GL_DIFFUSE (0.8,0.8,0.8,1.0) Cor difusa do material GL_SPECULAR_AND_DIFFUSE (RGBA) Cor ambiente e especular do material GL_SPECULAR (0.0,0.0,0.0,1.0) Cor especular do material GL_SHININESS 0.0 Expoente especular (brilho na superfície) GL_EMISSION (0.0,0.0,0.0,1.0) Cor emissiva do material (luz própria) Página 17

Iluminação em OpenGl Exemplo3DComIluminacao.cpp void Inicializa (void) { // Habilita a definição da cor do material a partir da cor corrente glenable(gl_color_material); //Habilita o uso de iluminação glenable(gl_lighting); // Habilita a luz de número 0 glenable(gl_light0); // Habilita o depth-buffering (z-buffer) glenable(gl_depth_test); } // Habilita o modelo de colorização de Gouraud glshademodel(gl_smooth);... Página 18

Iluminação em OpenGl void DefineIluminacao (void) { GLfloat luzambiente[4]={0.2,0.2,0.2,1.0}; GLfloat luzdifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloat luzespecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" GLfloat posicaoluz[4]={0.0, 50.0, 50.0, 1.0}; // Capacidade de brilho do material GLfloat especularidade[4]={1.0,1.0,1.0,1.0}; GLint especmaterial = 60; Página 19

Iluminação em OpenGl // Define a refletância do material glmaterialfv(gl_front,gl_specular, especularidade); // Define a concentração do brilho glmateriali(gl_front,gl_shininess,especmaterial); // Ativa o uso da luz ambiente gllightmodelfv(gl_light_model_ambient, luzambiente); } // Define os parâmetros da luz de número 0 gllightfv(gl_light0, GL_AMBIENT, luzambiente); gllightfv(gl_light0, GL_DIFFUSE, luzdifusa ); gllightfv(gl_light0, GL_SPECULAR, luzespecular ); gllightfv(gl_light0, GL_POSITION, posicaoluz ); Página 20

Iluminação em OpenGl void Desenha(void) // Limpa a janela de visualização com a cor // de fundo definida previamente glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); // Chama a função que especifica os parâmetros de iluminação DefineIluminacao(); // Altera a cor do desenho para azul glcolor3f(0.0f, 0.0f, 1.0f); // Função da GLUT para fazer o desenho de um "torus" // com a cor corrente glutsolidtorus(20.0, 35.0, 20, 40); // Executa os comandos OpenGL glutswapbuffers(); } Código exemplo - http://migre.me/1nnch Página 21