A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Navegador de cenas com openGL e rastreamento de raios

Apresentações semelhantes


Apresentação em tema: "Navegador de cenas com openGL e rastreamento de raios"— Transcrição da apresentação:

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

2 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.

3 Espaço de coordenadas

4 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);

5 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 );

6 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 */

7 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.

8 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 */

9 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); }

10 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(); }

11 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 ...

12 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

13 Tipos de primitivas gráficas do OpenGL

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

15 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();


Carregar ppt "Navegador de cenas com openGL e rastreamento de raios"

Apresentações semelhantes


Anúncios Google