Hugo Siqueira (hlfs) Lauro Mafra Rafael Correa

Slides:



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

Continuidade: sem interrupções
Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Transformações geométricas no plano.
Programação em Java Prof. Maurício Braga
Tutorial – Modelagem – Caneca
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
Projeções e OpenGL Alex F. V. Machado.
Prof.: Raphael Carvalho
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica OpenGL Básico
Navegador de cenas com openGL e rastreamento de raios
OpenGL Alberto B. Raposo.
Computação Gráfica Teórica
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Funções para serem usadas no exercício de Lab Hoje glRotatef(GLfloat angulo, GLfloat x, GLfloat y, GLfloat z) glTranslatef(GLfloat x, GLfloat y, GLfloat.
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 OpenGL.
Computação Gráfica Iluminação e Texturas.
7 - Criação de Páginas Web
Computação Gráfica: Aula6: Iluminação
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
Animações Independentes na Mesma Cena
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
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.
POWER POWER POINT POINT.
ÓPTICA GEOMÉTRICA PREGOLINI.
Transformações Geométricas no Plano e no Espaço
Iluminação e Sombreamento
Computação Gráfica Aula 3 Transformações Geométricas
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
Computação Gráfica Introdução ao OpenGL.
APRESENTANDO O TECLADO
Computação Gráfica – Iluminação
Computação Gráfica – Iluminação
Image Based Cartoon Style Rendering Jeronimo Silvério Venetillo Fabio Issao Nakamura.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin
Desenhos Tridimensionais
Realidade Virtual Aula 5
Introdução à Multimídia
OpenGL Aula Prática.
Visualização Tridimensional
Backup DE DADOS DO USUÁRIO. Cópia de segurança dos dados no computador, alguns fáceis e outros trabalhosos, de acordo com a quantidade de dados. Utilizado.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
CAD AutoCAD Layers.
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.
Visão Computacional Formação da Imagem Radiometria
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Adriano Marcos Petrônio
Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes.
Microsoft Excel.
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Iluminação.
Linguagem de Programação
1º e 2º ano XII Olimpíadas das Cores Emílio Miotti.
Introdução à Computação Gráfica Iluminação
1 Computação Gráfica Prof. Dr. Júlio C. Klafke UNIP-Objetivo
Aline Oliveira Everton Godoy Gabriel Leoni Lenilton Rocha Nelson Deda.
Prof.: Raphael Carvalho. ÓPTICA GEOMÉTRICA É a parte da Física que estuda os fenômenos relacionados com a luz e sua interação com meios materiais quando.
Transcrição da apresentação:

Hugo Siqueira (hlfs) Lauro Mafra Rafael Correa Rosana Silva Matos (rsm2)

Roteiro O que é OpenGL GLUT Configurando GLUT Primitivas Geométricas Cores Transformações Geométricas Iluminação Referências

O que é OpenGL Open Graphics Library API para renderização gráfica 3D Adotado por diversas plataformas de hardware (microcomputadores, estações de trabalho,computadores de médio e grande porte) Bem como em diversos sistemas operacionais como Windows, Linux, entre outros Amplamente utilizada no desenvolvimento de vários tipos de aplicações facilidade de aprendizado, fornece estabilidade das rotinas e possui resultados visuais consistentes As aplicações que mais utilizam OpenGL têm sido as de jogos, científicas e comerciais

O que é OpenGL Pode ser visto como uma máquina de estados mantém as variáveis de estado Cor, visualização e transformações correntes Padrões de tracejado de linhas e polígonos Modos de desenho de polígonos Convenções de empacotamento de pixel [pixel packing] Posições e características de luzes Propriedades do material dos objetos que estão sendo desenhados Cada variável de estado possui um valor default que pode ser lido e/ou alterado Algumas variáveis de estado podem ser habilitadas ou desabilitadas

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 GLUT é um projeto descontinuado Aplicações devem utilizar o FreeGLUT ou OpenGLUT, versões open source e com muitos bugs do GLUT corrigidos

Configurando GLUT Windows já possui uma implementação do OpenGL Necessário utilizar um sistema de janelas no desenvolvimento das aplicações GLUT Baixar o GLUT em: http://www.cin.ufpe.br/~rsm2/GLUT.rar Descompactar o GLUT.rar em algum diretório C:\Temp\ Após descompactar, definir os diretórios de include e library no Visual Studio Para definir tais diretórios, deve-se seguir: Menu Tools -> Options Selecionar Projects -> VC++ Directories

Configurando GLUT Para o diretório de include: Selecionar a opção Include files Clicar no ícone do diretório e indicar o diretório include que se encontra abaixo do diretório GLUT, previamente descompactado Para o diretório de libraries: Selecionar a opção Library files Clicar no ícone do diretório e indicar o diretório lib que se encontra abaixo do diretório GLUT, previamente descompactado Após definir os diretórios de include e library, clicar em OK GLUT já está devidamente configurado para o desenvolvimento de aplicações OpenGL com sistema de janelas

Criando uma aplicação Criando um projeto No menu File -> New -> Project... Escolher Visual C++ Projects -> Win32 -> Win32 -> Console Project 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:\ Clicar em OK Clicar em Application Setings -> Empty, para criar um projeto vazio Clicar em Finish

Configurando GLUT Após a criação do projeto, é necessário copiar o arquivo glut32.dll e o freeglut.dll para a pasta do projeto baixar em http://www.cin.ufpe.br/~rsm2/glut2.rar Adicionar um arquivo que conterá a função main e o código da aplicação OpenGL Clicar na pasta de fontes do projeto com o botão direito e seleciona Add -> Add New Item... Selecionar a opção C++ File (.cpp) e fornecer o nome do arquivo Clicar em Open e o arquivo criado será aberto no editor

Primitivas Geométricas OpenGL conta com 10 primitivas geométricas, sendo divididas da seguinte forma: 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 eixo 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); glVertex2f( xf, y f); glEnd();

Primitivas Geométricas Linhas GL_LINES --> No caso de serem colocados números ímpares de vértices, o último é ignorado 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_POLYGON --> Desenha polígonos convexos de acordo com as especificações das coordenadas. É semelhante ao LINE_LOOP no fato de ligar a última coordenada a primeira GL_TRIANGLE_STRIP --> Desenha uma série de triângulos que são conectados uns aos outros ao longo dos lados que podem ser compartilhados GL_TRIANGLE_FAN --> Funciona de forma semelhante ao anterior , mas os triângulos criados possuem a mesma origem GL_TRIANGLES --> Gera como resultado triângulos independentes. Ela ignora os dois últimos vértices, pois cinco vértices não formam dois triângulos independentes GL_QUAD_STRIP --> Desenha uma série de quadriláteros entre os lados compartilhados GL_QUADS --> Desenha quadriláteros independentes. Ela ignora os dois últimos vértices, pois 6 vértices não formam dois quadriláteros independentes

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)

Exercício Criar um cubo colorido, usando GL_QUADS e GL_TRIANGLES cujo centro encontra-se na origem e possui lado igual a 2f

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 exemplo: glTranslatef(xf, yf, zf); glBegin(GL_POLYGON); glVertex2f( xf, yf); glEnd();

Transformações Geométricas Rotação Rotacionar um objeto significa girar o mesmo em torno de um eixo de acordo com determinado ângulo Em OpenGL: Rotate {f,d} (Angulo, x, y, z ), onde: Angulo -> é o angulo de rotação x,y,z -> definem o eixo onde o objeto será rotacionado exemplo: glRotatef(45.0f,0.0f,0.0f,1.0f);// roda 45 graus no eixo z glBegin(GL_POLYGON); glVertex2f( xf, yf); glEnd();

Transformações Geométricas Escala O escalamento altera o tamanho dos objetos, multiplicando as coordenadas (x,y,z,) usadas para defini-los, por fatores Sx, Sy e Sz, respectivamente. Supondo, por exemplo, um vértice de um polígono definido pelas coordenadas (x,y,z), as novas coordenadas (x',y',z') deste vértice após uma operação de escalamento seria: x‘ = x.sx y‘ = y.sy z‘ = z.sz Os fatores Sx, Sy e Sz podem assumir quaisquer valores positivos, sendo que para valores menores que 1, o tamanho do objeto é reduzido, para valores maiores que 1, o aumenta-se o tamanho do objeto e para valores iguais a 1, o tamanho original do objeto é mantido

Transformações Geométricas Escala Em OpenGL: Scale {f,d} ( Sx, Sy,Sz ), onde: Sx: é o fator de escala em relação a X. Sy: é o fator de escala em relação a Y. Sz: é o fator de escala em relação a Z. exemplo: glScalef(1.0f,1.3f,1.0f); // aumenta o tamanho do objeto numa escala // de 1.3 em relação a Y glBegin(GL_POLYGON); glVertex2f( xf, yf); glVertex2f(xf, yf); glEnd();

Exercício Alterar o comportamento do cubo fazendo com que ele se movimente no sentido positivo e negativo do eixo z quando forem pressionadas as teclas : seta para cima e seta para baixo.

Iluminação Em OpenGL a cor de uma fonte de luz é caracterizada pela quantidade de vermelho (R), verde (G) e azul (B) que ela emite E o material de uma superfície é caracterizado pela porcentagem dos componentes R, G e B que chegam e são refletidos em várias direções No modelo de iluminação a luz em uma cena vem de várias fontes de luz que podem ser "ligadas" ou "desligadas" individualmente No modelo de iluminação OpenGL a fonte de luz tem efeito somente quando existem superfícies que absorvem e refletem luz Assume-se que cada superfície é composta de um material com várias propriedades O material pode emitir luz, refletir parte da luz incidente em todas as direções, ou refletir uma parte da luz incidente numa única direção

Iluminação Para sintetizarmos imagens realistas, precisamos saber a quantidade de luz associada a um ponto qualquer, na face de um objeto a respeito do qual queremos gerar a imagem Em OpenGL, criamos um modelo de iluminação definindo as características das fontes de luz e as propriedades do material do objeto. Aqui veremos três: 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; Basicamente existem dois comandos que serão utilizados na criação de um modelo de iluminação: Light: define as características da fonte de luz Material: define as propriedades do material do objeto

Iluminação Light glLightfv ( source , parameter , pointer_to_array) glLightf ( source , parameter , value) A diferença entre as duas está nos parâmetro parameter. Alguns exigem seus atributos como um ponteiro para um vetor e outros exigem um valor source -> indica qual a fonte de luz que está sendo definida Em OpenGL é possível definir até 8 fontes de luzes distintas: GL_LIGHT0 GL_LIGHT1 ... GL_LIGHTn >> n máximo = 7 parameter -> especifica as características da fonte de luz pointer_to_array -> significa os atributos referentes a características

Iluminação Material glMaterialfv(face, type, pointer_to_array) ; ou glMaterialf ( face, type, value); onde: face: indica quais as faces (face frontal, face de trás ou ambas) type: indica qual propriedade será configurada pointer_to_array: indica os atributos referentes a propriedade Value: atributo referente ao tipo As faces podem ser especificadas pelas constantes: GL_FRONT: somente as faces da frente GL_BACK : somente as faces de trás GL_FRONT_AND_BACK : ambas

Iluminação Luz Ambiente ilumina todas as faces do objeto de maneira uniforme Em OpenGL: GLfloat luz_ambiente[] = { XR, XG, XB, X } GLfloat objeto_ambiente[] = { YR, YG, YB, Y} glLightfv(GL_LIGHT0, GL_AMBIENT, luz_ambiente) glMaterialf (GL_FRONT_AND_BACK, GL_AMBIENT,objeto_ambiente) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0)

Iluminação Reflexão Difusa As faces onde os raios de luz incidem de maneira mais perpendicular parecem mais brilhantes que aquelas nas quais a luz incide de maneira mais inclinada Em OpenGL: GLfloat luz_difusa[] = { XR, XG, XB, X } GLfloat objeto_difusa [] = { YR, YG, YB, Y} glLightfv(GL_LIGHT0, GL_DIFFUSE, luz_difusa) glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, objeto_difusa) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0)

Iluminação Reflexão Especular Em OpenGL: GLfloat luz_especular[] = { XR, XG, XB, X } GLfloat objeto_especular[] = { YR, YG, YB, Y} glLightfv(GL_LIGHT0, GL_SPECULAR, luz_especular ) glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, objeto_especular) glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, n ) glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GL_SHININESS: define o quanto a superfície é polida, ou seja, o brilho dessa superfície O intervalo de GL_SHININESS em OpenGL é de 0.0 a 128.0

Exercício Alterar a cor da luz, a cor do buffer e a intensidade do brilho da esfera do arquivo questao_3.cpp

Referências http://www.opengl.org/ http://www.inf.pucrs.br/~manssour/OpenGL/ http://nehe.gamedev.net/