Navegador de cenas com openGL e rastreamento de raios

Slides:



Advertisements
Apresentações semelhantes
Sistemas de Interfaces com o Usuário e Glut/OpenGL
Advertisements

Daniel de Vasconcelos Campos
Funções para serem usadas no exercício de Lab
CRAb – Grupo de Computação Gráfica Departamento de Computação UFC
Computação Gráfica Mapeamento de textura
OpenGL Computação Gráfica.
Programação II Estruturas de Dados
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
Silicon Graphics OpenGL - Apresentação
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Projeções e OpenGL Alex F. V. Machado.
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica OpenGL Básico
Visualização e Projeções I
Computação Gráfica Interativa - Gattass
OpenGL Conceitos Básicos
Sistemas de Interfaces com o Usuário e OpenGL/Glut
Algoritmo de Rastreamento de Raios
OpenGL Alberto B. Raposo.
MGattass Algoritmo de Rastreamento de Raios. MGattass Registros da camera obscura (latim) 1.Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno.
MGattass Algoritmo de Rastreamento de Raios. MGattass Registros da camera obscura (latim) 1.Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno.
Computação Gráfica Módulo IV – OpenGL
Alberto B. Raposo e Marcelo Gattass
Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Visualização 3D Incluir no FrameWork Básico (na página da disciplina), as.
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
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.
OpenGL – Uma abordagem prática e objetiva
Introdução + Transformações Geométricas
Computação Gráfica Desempenho.
Computação Gráfica Iluminação e Texturas.
Computação Gráfica Pipeline Gráfico.
Computação Gráfica – Transformações Geométricas
Simulação Massa-Mola para Tecidos
Introdução à Computação Gráfica Projeções
Visibilidade em Computação Gráfica
FUNDAMENTOS DE COMPUTACION GRAFICA Jessica Palomares
Animações Independentes na Mesma Cena
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};
Hugo Siqueira (hlfs) Lauro Mafra Rafael Correa
Transformações Geométricas no Plano e no Espaço
Iluminação e Sombreamento
Computação Gráfica – Visibilidade
Computação Gráfica Mapeamento de textura
Ambient Occlusion Disciplina: Fundamentos de Computação Gráfica Professor : Marcelo Gattass Allan Carlos Avelino Rocha Departamento de Informá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
Computação Gráfica – Iluminação
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Transformações Projetivas
Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin
Desenhos Tridimensionais
Computação Gráfica – Transformações Geométricas
Realidade Virtual Aula 5
OpenGL Aula Prática.
Visualização Tridimensional
Algoritmo de Rastreamento de Raios
Viewport.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Transformações Geométricas Profa. Mercedes Gonzales Márquez.
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.
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto
Modelo e Câmera e Projeção no OpenGL
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Vetores Normais.
Por Anderson Afonso Cardozo UNIVERSIDADE CATÓLICA DE PELOTAS
Computação Gráfica – Transformações Geométricas Profa. Mercedes Gonzales Márquez.
Transcrição da apresentação:

Navegador de cenas com openGL e rastreamento de raios Trabalho 3 Navegador de cenas com openGL e rastreamento de raios

Objetivos Mudar o programa do trabalho 2 para renderizar utilizando o OpenGL (o TAD zbuffer dá uma dica de como fazer isto). Colocar na interface IUP um botão que quando acionado re-calcula a cor de cada pixel da tela através do algoritmo de Rastreamento de Raios. Mudar a interface do programa para aceitar comandos de movimentação de câmera a partir do teclado segundo o seu modelo preferido de comando de jogos.

Espaço de coordenadas

Detalhes da implementação Inicializando o OpenGL Habilita o teste de profundidade glEnable (GL_DEPTH_TEST); Menor z signfica mais próximo glDepthFunc (GL_LESS);

glClear (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); Ativa os cálculos de iluminação glEnable (GL_LIGHTING); Posição do observador: local ou no infinito A localização do observador pode ou não influenciar no cálculo da iluminação. O default é o observador no infinito. Para mudar a configuração, considerando-se a iluminação conforme o observador utilize: glLightModeli (GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); Esta função modifica o cálculo dos ângulos de reflexão especular. Suaviza as diferenças de cores entre os objetos glShadeModel (GL_SMOOTH); Normaliza os vetores normais antes de utilizá-los glEnable (GL_NORMALIZE); Limpa o buffer de profundidade glClear (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );

Define a matriz de projeção glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0,0,winW,winH); /* mapeamento */ camGetOGLPerspective (camera, &fovy, &aspect, &zNear, &zFar); /* pega os parâmetros da cena */ gluPerspective (fovy, aspect, zNear, zFar); /* Permite definir uma perspectiva equivalente a glFrustum */ /* aspect = largura / altura */

Viewport – transformação de mapeamento glViewport (x, y, width, height); GLUT & IUP: A função default de “resize” define a viewport como sendo a área total do canvas.

Define a matriz do modelo e da transformação para a câmera glMatrixMode (GL_MODELVIEW); glLoadIdentity(); camGetOGLLookAt(camera, &eyex,&eyey,&eyez, &centerx,&centery,&centerz, &upx,&upy,&upz); gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz); /* gera a matriz de view */

Define as luzes no sistema de eixos dos modelos globais for( i = 0; i < numberOfLights; ++i ) { Light light = sceGetLight( scene, i ); Vector lightPosition = lightGetPosition(light); Color lightColor = lightGetColor(light); Color ambientLight = sceGetAmbientLight(scene); float tmp[4]; colorGetOGLVector(ambientLight,tmp); glLightfv(GL_LIGHT0+i, GL_AMBIENT, tmp); /* Define parâmetros de uma determinada luz. */ colorGetOGLVector(lightColor,tmp); glLightfv(GL_LIGHT0+i, GL_DIFFUSE, tmp); glLightfv(GL_LIGHT0+i, GL_SPECULAR,tmp); algGetOGLVector(lightPosition,tmp); glLightfv(GL_LIGHT0+i, GL_POSITION,tmp); glEnable(GL_LIGHT0+i); }

Desenha os objetos for (i=0;i < numberOfObjects; i++ ) { Object object = sceGetObject(scene,i); Material material = sceGetMaterial(scene,objGetMaterial(object)); Color diffuseColor = matGetDiffuse(material, algVector(0,0,0,1)); Color specularColor = matGetSpecular(material); double specularExpoent = matGetSpecularExponent(material); float tmp[4],zero[]={0.0,0.0,0.0,1.0}; colorGetOGLVector(diffuseColor,tmp); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, tmp); colorGetOGLVector(specularColor,tmp); glMaterialfv(GL_FRONT, GL_SPECULAR, tmp); /especifica as propriedades de um material/ glMaterialf(GL_FRONT, GL_SHININESS, specularExpoent ); glMaterialfv(GL_FRONT, GL_EMISSION, zero); glColor4f(1.0f,1.0f,1.0f,material->opacityFactor); /* Transparência – Pode ser feita aqui */ glPushMatrix(); objDraw(object); glPopMatrix(); }

Pilha de matrizes void glPushMatrix(void); Faz o empilhamento do estado atual do objeto na pilha. A pilha corrente é determinada pelo comando glMatrixMode(). void glPopMatrix(void); Desempilha o topo da pilha, destruindo o conteudo retirado da matriz. A pilha corrente é determinada por glMatrixMode(). … glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); glPushMatrix( ); // duplica topo glRotate(30,0,0,1); glTranslate(10,0,0); draw_object_1( ); glPopMatrix( ); // restaura estado ...

Transparência if(object->blend) { glEnable(GL_BLEND); // Liga o Blending glDisable(GL_DEPTH_TEST); // Desliga o teste de profundidade } else glDisable(GL_BLEND); // Desliga o Blending glEnable(GL_DEPTH_TEST); // Liga o teste deprofundiade

Tipos de primitivas gráficas do OpenGL

Especificação de primitivas glBegin(tipo_de_prim); glEnd( ); …define atributo de vértice …define vértice

DrawObject Esfera Cubo Triângulo glutSolidSphere(radius, slices, stacks); Cubo seqüência de QUADS Triângulo glBegin(GL_TRIANGLES); glNormal3f( normal.x,normal.y,normal.z); /* normal unitária */ glVertex3f(vertice1.x, vertice1.y, vertice1.z); glVertex3f(vertice2.x, vertice2.y, vertice2.z); glVertex3f(vertice3.x, vertice3.y, vertice3.z); glEnd();