Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin

Slides:



Advertisements
Apresentações semelhantes
Curso de extensão em Blender Prof. Luiz Gonzaga Damasceno
Advertisements

Programação em Java Prof. Maurício Braga
Tutorial – Modelagem – Caneca
Computação Gráfica Mapeamento de textura
Informática Aplicada.
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
Projeções e OpenGL Alex F. V. Machado.
COMPUTAÇÃO GRÁFICA.
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica OpenGL Básico
Introdução à Computação Gráfica Colorização
Iluminação e Sombreamento
Navegador de cenas com openGL e rastreamento de raios
OpenGL Conceitos Básicos
OpenGL Alberto B. Raposo.
Computação Gráfica Teórica
Computação Gráfica: Aula8: Iluminação
Iluminação Para programar um sistema de iluminação, dois passos principais devem ser considerados: c) Que tipo e posição de Iluminação se deseja b) Que.
Computação Gráfica: Rendering e Rasterização
Computação Gráfica: Aula6: Iluminação
Computação Gráfica OpenGL.
Computação Gráfica Iluminação e Texturas.
7 - Criação de Páginas Web
OSA - Operação de Software e Aplicativos
Computação Gráfica: Aula6: Iluminação
ÓPTICA FÍSICA: Estuda os fenômenos luminosos cuja explicação depende das teorias relativas á natureza da luz (onda ou partícula). GEOMÉTRICA: Estuda os.
COMO CONFIGURAR GLUT NO VISUAL STUDIO 2008 Prof. Marcelo Walter, Tiago Bezerra do Amaral Sales, Vladmir Alves Passos.
Simulação Massa-Mola para Tecidos
Fundamentos Corel Draw Aula I Prof. David Bianchini
Introdução à Computação Gráfica Projeções
Modelos de reflexão Trabalho 1 Pablo Bioni.
Animações Independentes na Mesma Cena
Arte e Tecnologia Coreografia no Sec. XXI
Tarefa: Implementar o Demo na página da disciplina. Para trabalhar com iluminação em OpenGL, deve-se definir: 1)Vetores de iluminação : Ex: GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
Computação Gráfica Aula 12 Superfícies Prof. Leo.
Hugo Siqueira (hlfs) Lauro Mafra Rafael Correa
Transformações Geométricas no Plano e no Espaço
Iluminação e Sombreamento
COR.
Computação Gráfica Aula 3 Transformações Geométricas
Computação Gráfica – Visibilidade
Professor: Fábio Raimundo Disciplina: Física Semi - Extensivo Espelhos
Computação Gráfica – Introdução ao OpenGL
Visualização Tridimensional (Câmera Sintética)
Computação Gráfica Introdução ao OpenGL.
Computação Gráfica – Iluminação
Introdução à Computação Gráfica OpenGL Básico
COMPUTAÇÃO GRÁFICA E INTERFACES
Image Based Cartoon Style Rendering Jeronimo Silvério Venetillo Fabio Issao Nakamura.
Criando uma formatação
Computação Gráfica – Transformações Projetivas
Desenhos Tridimensionais
Introdução à Multimídia
OpenGL Aula Prática.
Visualização Tridimensional
Viewport.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Realidade Virtual Aula 2 Remis Balaniuk. Enxergando grande, começando pequeno Quem começa a aprender RV normalmente sofre um primeiro impacto negativo.
Visualização Tridimensional. Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Animação 2D. // Variáveis que guardam a translação que será aplicada // sobre a casinha GLfloat Tx; GLfloat Ty; // Variáveis que guardam os valores mínimos.
Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes.
Computação Gráfica: Aula6: Iluminação
Microsoft Excel.
1º e 2º ano XII Olimpíadas das Cores Emílio Miotti.
Introdução à Computação Gráfica Iluminação
TV de Bolso TV de Bolso apresenta Tutorial: editando seu vídeo no Movie Maker.
Aline Oliveira Everton Godoy Gabriel Leoni Lenilton Rocha Nelson Deda.
Transcrição da apresentação:

Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin www.cin.ufpe.br/~vhr/opengl

Roteiro O que é OpenGL? O Pipeline de Renderização O que é GLUT? Formato dos Comandos em OpenGL Primitivas Geométricas Visualização Cores Transformações Geométricas Iluminação Configurando OpenGL e GLUT Textura Referências

O que é OpenGL ? A OpenGL é uma máquina de estados porque é possível colocá-la em vários estados (ou modos) que não são alterados, a menos que uma função seja chamada para isso. Muitas delas referem-se a modos que podem ser ativados ou desativados com os comandos glEnable() e glDisable().

O Pipeline de Renderização

O que é GLUT ? OpenGL Utility Toolkit Sistema de Janelas independente de plataforma para desenvolvimento de aplicações OpenGL Possui funções para: Criar/Destruir janelas Tratar entradas de teclado, mouse e joysticks Baseado em funções de callback para tratamento de eventos API simples, não possuindo recursos diretos para criação de GUI's Independente do sistema de janelas nativo Programação orientada a eventos

Formato dos Comandos em OpenGL

Primitivas Geométricas OpenGL possui 10 primitivas geométricas um tipo de ponto três tipos de linhas seis tipos de polígonos Os vértices são definidos pelo comando Vertex glVertex2f( float x, float y); //vértice para um eixo 2D glVertex3d(double x,double y, double z); //vértice para um exixo 3D As primitivas precisam ser delimitadas através de Begin ... End conforme abaixo: Begin ( nome da primitiva); ... // aqui serão colocados comandos Vertex. End (void);

Primitivas Geométricas Ponto a primitiva responsável em desenhar pontos na tela é GL_POINTS O código no exemplo abaixo desenha 3 pontos na tela. Cada vértice torna-se um ponto glBegin( GL_POINTS ); glVertex2f( xf, yf); glEnd();

Primitivas Geométricas Linhas GL_LINES : O terceira coordenada ( z ) é ignorada pois a linha é formada por dois vértices. Se houvesse um quarto vértice, uma nova linha entre o terceiro e quarto vértice seria exibida GL_LINE_STRIP: cria linhas consecutivas, ligando o primeiro vértice com o segundo, o segundo com o terceiro e assim por diante GL_LINE_LOOP : Funciona de maneira semelhante ao anterior, porém o último vértice é ligado a primeira, devido a isso o LOOP no seu nome. O espessura de uma linha pode ser modificada através do comando glLineWidth (GLint espessura), bastando passar como parâmetro a espessura da linha

Primitivas Geométricas Polígonos Áreas formadas por várias linhas conectadas Arestas do polígono não podem se cruzar Devem ser áreas convexas O número de segmentos do polígono não é restrito OpenGL assume que todos os polígonos são simples Problema da superfície construída a partir de quadriláteros Quadriláteros são polígonos não planares Caso seja feita alguma transformação, podem deixar de ser polígonos simples Para evitar que isto aconteça, é sempre bom utilizar triângulos para compor as superfícies, pois triângulos são sempre co-planares

Primitivas Geométricas Polígonos GL_TRIANGLES: Desenha triângulos a cada 3 vértices fornecidos; GL_TRIANGLE_STRIP: Uma série de triângulos conectados. Após o desenho do primeiro triângulo, cada vértice adicional forma um novo triângulo com dois últimos pontos fornecidos; GL_TRIANGLE_FAN: Uma série de triângulos com um único vértice em comum. O vértice comum é o primeiro vértice fornecido; GL_QUADS: Desenha um quadrilátero a cada 4 vértices fornecidos; GL_QUAD_STRIP: Desenha uma série de quadriláteros. Após o primeiro, apenas mais 2 vértices precisam ser fornecidos para o desenho do segundo quadrilátero; GL_POLYGON: Desenha polígonos convexos simples com um número arbitrário de vértices

Visualização Para permitir a visualização de objetos tridimensionais é necessário usar projeção para converter as coordenadas 3D em coordenadas 2D que correspondem a uma visão específica do objeto. Existem dois tipos de projeção: a perspectiva e a paralela.

Visualização Projeção em perspectiva: é a que acontece no processo de formação de imagens em nossos olhos ou numa câmera fotográfica, por isso é a que gera imagens mais realistas.

Visualização Projeção paralela ou ortogonal : é a forma mais simples de projeção. Nela a imagem de um ponto é definida como a projeção normal deste ponto no plano de projeção. A projeção paralela pode ser vista como uma projeção perspectiva onde o centro de projeção está no infinito. 

Visualização Projeção ortogonal: glMatrixMode( GL_PROJECTION );  glLoadIdentity();   glOrtho(X min, X max, Y min, Y max, Near, Far);

Visualização Projeção em perspectiva: glMatrixMode( GL_PROJECTION );  glLoadIdentity();  glPerspective(fovy, aspect, near, far);

Visualização Caso você faça a projeção com os comandos glOrtho ou glFrustum, o OpenGL especifica uma matriz default, na qual a câmera está alinhada com o eixo z. A posição da câmera pode ser alterada através das transformações geométricas sobre a matriz de visualização. glMatrixMode( GL_MODELVIEW );     glLoadIdentity();    glRotatef(-30, 1.0, 0.0, 0.0);     glRotatef(30, 0.0, 1.0, 0.0);     glRotatef(30, 0.0, 0.0, 1.0);     glTranslatef(2.0,0.0,0.0);

Cores As cores em OpenGL são determinadas pelo comando Color Seguem o padrão RGB (Red Green Blue) adotados em diversos sistemas Em OpenGL: Color3 {f,d} ( XRed, XGreen, XBlue), onde : XRed: porcentagem de vermelho (variando de 0.0 a 1.0) XGreen: porcentagem de verde (variando de 0.0 a 1.0) XBlue: porcentagem de azul (variando de 0.0 a 1.0)

Transformações Geométricas Em muitas aplicações de computação gráfica, há a necessidade de alterar e manipular o conteúdo de uma cena Animações, por exemplo, são produzidas pelo movimento da câmera ou dos objetos presentes na cena Mudanças em orientação, tamanho e formato estão ligadas às transformações geométricas 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 partir daquele momento, até que seja novamente alterada

Transformações Geométricas Translação Quando aplicada a um objeto, reposiciona o mesmo mudando suas coordenadas (x,y,z) no espaço tridimensional, por fatores Tx, Ty e Tz, respectivamente. Dessa forma, considerando, inicialmente, um objeto com coordenadas espaciais (x,y,z), sua nova posição (x',y',z') após uma operação de translação será: x‘ = x + Tx y‘ = y + Ty z‘ = z + Tz

Transformações Geométricas Translação Em OpenGL: Translate {f,d} ( Tx, Ty, Tz ), onde: Tx: é o quanto se quer transladar o objeto em relação ao eixo X Ty: é o quanto se quer transladar o objeto em relação ao eixo Y Tz: é o quanto se quer transladar o objeto em relação ao eixo Z glTranslatef(xf, yf, zf); glBegin(GL_POLYGON); glVertex2f( xf, yf); glEnd();

Transformações Geométricas Rotação É o ato de efetuar um giro em um objeto de acordo com um ângulo e um eixo definidos anteriormente. 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. glRotatef(45.0f,0.0f,0.0f,1.0f);// roda 45 graus no eixo z glBegin(GL_POLYGON); glVertex2f( xf, yf); glEnd();

Iluminação Cria a sensação de Profundidade Sem iluminação Objetos parecem planos Adiciona Realismo à cena A sensação de profundidade provê mais realismo Deixa a cena mais bonita Criada através de Fontes de luz: Um ponto no Infinito (ex: o Sol) Um ponto próximo (ex: uma lâmpada incandescente) Uma fonte de luz distribuída (ex: lâmpadas de Neon ou de Gás)

Iluminação Como pretendemos utilizar iluminação, é indispensável definir vetores normais para o nosso objeto

Iluminação OpenGL permite dois tipos de Shading: O GL_FLAT, o GL_SMOOTH. O GL_FLAT é implementado levando em consideração apenas os vetores normais relativos ao triangulo. O GL_SMOOTH é implementado levando em consideração o modelo de iluminação de Gouraud.

Iluminação OpenGL aproxima a iluminação assumindo que a luz pode ser dividida nas suas componentes de vermelho, verde e azul (RGB). As fontes de luz são caracterizadas pelas quantidades RGB que emitem Os materiais das superfícies são caracterizados pelas percentagens dos componentes RGB recebidos que são refletidos nas várias direções.

Iluminação OpenGL considera várias formas de reflexão da luz incidente: Emitida: 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. 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.

Iluminação A iluminação é definida apenas uma vez, na função para inicialização do GLUT GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {25.0}; GLfloat light_position[] = {-1.0, 1.0, 1.0, 0.0};   /*Inicia as características gerais dos materiais */ glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); /* Inicia a iluminação */ glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);

Configurando OpenGL e GLUT Criando um projeto No menu File -> New -> Project... Escolher Visual Studio Projects escolha Win32 Console Aplication Selecionar o nome do projeto, por exemplo,OpenGL Cube Selecionar o nome da solução, por exemplo, OpenGL Apps Selecionar o caminho do projeto, por exemplo, C:\Temp Clicar em OK Na tela que aparecer clica em next e marcar a opção empty project Baixe os arquivos necessários para a configuração em www.cin.ufpe.br/~vhr/opengl

Configurando OpenGL e GLUT Clique com o botão direito no ícone do projeto e depois em propriedades

Configurando OpenGL e GLUT Clique em C/C++ depois em General e coloque o diretório com o glut.h em Additonal Include Directories coloque o diretório com o glut.h em Additonal Include Directories

Configurando OpenGL e GLUT Agora no menu C/C++/Preprocessor em Preprocessor Definition coloque GLUT_NO_LIB_PRAGMA

Configurando OpenGL e GLUT Agora no menuLinker/General  coloque o diretorio que contém glut32.lib em additional library directories

Configurando OpenGL e GLUT Em Linker/Input va em additional dependencies coloque glut32.lib glu32.lib opengl32.lib nessa ordem. E depois clique em e copie o arquivo glut32.dll para a pasta do executável

Exercício Pegar o código inicial em http://www.cin.ufpe.br/~vhr/opengl/exercicio.txt Desenvolver as funções que não estão implementadas no código dado e usando os conceitos acima explicadas Lista de funções para ajudar em: http://www.cin.ufpe.br/~vhr/opengl/Lista de Funções.docx

Textura A idéia de textura é, de maneira geral, a sobreposição de um objeto 3D por uma imagem. Dessa forma, é possível dar impressão de relevo, chegando a um maior nível de detalhamento e realismo. Em OpenGL Uma textura costuma ser guardada em uma matriz que contém a informação de cada elemento da textura, que corresponde a um pixel na imagem original, denominado textel.

Textura Inicialização da Textura: é necessário especificá-la através da função glTexImage2D(). glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_data);

Textura Os parâmetros GL_TEXTURE_MAG_FILTER e GL_TEXTURE_MIN_FILTER referem-se, respectivamente, aos casos em que existe aumento (magnification) e redução (minification). glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); Para definir como a textura será aplicada a cada pixel utiliza-se a função glTexEnvf(). glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

Textura Para desenhar alguns objetos com texturas e outros sem texturas, podemos utilizar as funções glEnable() e glDisable() para ativá-las apenas quando necessárias. É necessário atribuir coordenadas de textura a cada vértice do objeto glTexCoord2fv(xTextura, yTextura); glNormal3fv(xVertice, yVertice, zVertice);  glVertex3fv(xVetorNormal, yVetorNormal, zVetorNormal);

Exercício Baixar projeto exemplo em www.cin.ufpe.br/~vhr/opengl Tentar modificar a textura no exemplo dado.

Referências http://www.dcc.ufla.br/~bruno/aulas/cg/monte-mor/ http://www2.dc.ufscar.br/~saito/download/comp-grafica/OPENGL-Spy.ppt http://www.xmission.com/~nate/opengl.html http://w3.ualg.pt/~srnunes/CG/exemplo4.html http://www.inf.pucrs.br/~manssour/OpenGL/BibliografiaLinks.html