Vetores Normais.

Slides:



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

II Projeto de PG Thiago Augusto Souza do Nascimento.
Funções para serem usadas no exercício de Lab
Computação Gráfica Mapeamento de textura
Informática Aplicada.
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
Recursividade Prof. Alex F. V. Machado
Projeções e OpenGL Alex F. V. Machado.
Modelos de ILuminação 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
SISTEMA DE COORDENADAS
Navegador de cenas com openGL e rastreamento de raios
Sistemas de Interfaces com o Usuário e OpenGL/Glut
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);
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.
Laboratório de Computação Gráfica OpenGL
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.
Movimentos de Câmara – Modo Explorador
Modelagem de Interfaces
Revisão da Linguagem C.
GEOMETRIA 4.0 Lançamento da obra, a partir da arquitetura
Personalizando Tabelas
Edição Vetorial de Ponto, Linha e Polígono
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO
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
Escolha uma face como superior definida
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};
POWER POWER POINT POINT.
Iluminação e Sombreamento
Computação Gráfica – Visibilidade
Computação Gráfica Mapeamento de textura
Visualização Tridimensional (Câmera Sintética)
Computação Gráfica Introdução ao OpenGL.
Introdução à Computação Gráfica OpenGL Básico
Nome : Héber Matheus L. Lunardelli Curso : A
O Tux Paint é um software de desenho voltado a crianças alfabetizadas ou não. Possui várias ferramentas para que qualquer usuário iniciante possa, com.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Transformações Projetivas
Desenhos Tridimensionais
UNIDADE 4: Processamento de texto
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
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.
Fundamentos e Tecnologia em Web
Computação Gráfica MO603/MC930
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Para iniciar um (novo) trabalho clique em arquivo > novo (ctrl + n)
Manipulação de Imagens em OpenGL
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.
Prática de Ensino em Matemática II Aula 5
Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1.
Objetos Predefinidos da GLUT
Iluminação.
Linguagem de Programação
1º e 2º ano XII Olimpíadas das Cores Emílio Miotti.
Aline Oliveira Everton Godoy Gabriel Leoni Lenilton Rocha Nelson Deda.
Superfícies de Bézier Visualização 3D
Transcrição da apresentação:

Vetores Normais

Um vetor normal (n) a uma face, ou superficie, é um vetor perpendicular a essa face. Os vetores normais determinam as faces visíveis para o observador virtual e também especifica qual será a cor de cada ponto das faces que compõe o objeto.

Função OpenGL void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) Função usada para especificar o vetor normal para cada face que será exibida. Os parâmetros correspondem aos valores (GLfloat) dos elementos x, y e z do vetor normal.

Prática Faremos a implementação de um Cubo, cujos vértices possuem cores diferentes que correspondem às cores básicas do modelo de cor RGB e às suas combinações.

Variáveis globais // Variáveis para controles de navegação GLfloat angle, fAspect; GLfloat rotX, rotY, rotX_ini, rotY_ini; GLfloat obsX, obsY, obsZ, obsX_ini, obsY_ini, obsZ_ini; int x_ini,y_ini,bot;

Definição de iluminação // Função responsável pela especificação dos parâmetros de iluminação void DefineIluminacao (void) { GLfloat luzAmbiente[4]={0.25,0.25,0.25,1.0}; GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloat posicaoLuz0[4]={0.0, 80.0, 0.0, 1.0}; GLfloat posicaoLuz1[4]={0.0, -80.0, 0.0, 1.0}; // 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_POSITION, posicaoLuz0 ); // Define os parâmetros da luz de número 1 glLightfv(GL_LIGHT1, GL_AMBIENT, luzAmbiente); glLightfv(GL_LIGHT1, GL_DIFFUSE, luzDifusa ); glLightfv(GL_LIGHT1, GL_POSITION, posicaoLuz1 ); }

Nesse programa, na função DesenhaCuboRGB, inicialmente foram desenhadas as linhas pretas que correspondem ao contorno do cubo. Depois, as faces do cubo foram pintadas, de acordo com os valores de cor dos vértices, em tons dégradés.

// Função que desenha um cubo cujas cores dos vértices // mostram como é o espaço RGB void DesenhaCuboRGB(void) { // Desenhas as linhas das "bordas" do cubo glColor3f(0.0f, 0.0f, 0.0f); glLineWidth(1.6f); glBegin(GL_LINE_LOOP); // frontal glVertex3f(40.0, 40.0, 40.0); glVertex3f(-40.0, 40.0, 40.0); glVertex3f(-40.0, -40.0, 40.0); glVertex3f(40.0, -40.0, 40.0); glEnd(); glBegin(GL_LINE_LOOP); // posterior glVertex3f(40.0, 40.0, -40.0); glVertex3f(40.0, -40.0, -40.0); glVertex3f(-40.0, -40.0, -40.0); glVertex3f(-40.0, 40.0, -40.0);

glBegin(GL_LINES); // laterais glVertex3f(-40.0, 40.0, -40.0); glVertex3f(-40.0, 40.0, 40.0); glVertex3f(-40.0, -40.0, -40.0); glVertex3f(-40.0, -40.0, 40.0); glVertex3f(40.0, 40.0, -40.0); glVertex3f(40.0, 40.0, 40.0); glVertex3f(40.0, -40.0, -40.0); glVertex3f(40.0, -40.0, 40.0); glEnd();

// Desenha as faces do cubo preenchidas // Face frontal glBegin(GL_QUADS); glNormal3f(0.0, 0.0, 1.0); // Normal da face glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(40.0, 40.0, 40.0); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-40.0, 40.0, 40.0); glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-40.0, -40.0, 40.0); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(40.0, -40.0, 40.0); // Face posterior glNormal3f(0.0, 0.0, -1.0); glColor3f(1.0f, 1.0f, 1.0f); glVertex3f(40.0, 40.0, -40.0); glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(40.0, -40.0, -40.0); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-40.0, -40.0, -40.0); glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(-40.0, 40.0, -40.0);

// Face lateral esquerda glNormal3f(-1.0, 0.0, 0.0); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-40.0, 40.0, 40.0); glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(-40.0, 40.0, -40.0); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-40.0, -40.0, -40.0); glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-40.0, -40.0, 40.0); // Face lateral direita glNormal3f(1.0, 0.0, 0.0); glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(40.0, 40.0, 40.0); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(40.0, -40.0, 40.0); glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(40.0, -40.0, -40.0); glColor3f(1.0f, 1.0f, 1.0f); glVertex3f(40.0, 40.0, -40.0);

// Face superior glNormal3f(0.0, 1.0, 0.0); glColor3f(0.0f, 1.0f, 1.0f); glVertex3f(-40.0, 40.0, -40.0); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-40.0, 40.0, 40.0); glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(40.0, 40.0, 40.0); glColor3f(1.0f, 1.0f, 1.0f); glVertex3f(40.0, 40.0, -40.0); // Face inferior glNormal3f(0.0, -1.0, 0.0); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-40.0, -40.0, -40.0); glColor3f(1.0f, 0.0f, 1.0f); glVertex3f(40.0, -40.0, -40.0); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(40.0, -40.0, 40.0); glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-40.0, -40.0, 40.0); glEnd(); }

Função Desenha // Função callback de redesenho da janela de visualização 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(); DesenhaCuboRGB(); // Executa os comandos OpenGL glutSwapBuffers(); }

Observador // Função usada para especificar a posição do observador virtual void PosicionaObservador(void) { // Especifica sistema de coordenadas do modelo glMatrixMode(GL_MODELVIEW); // Inicializa sistema de coordenadas do modelo glLoadIdentity(); DefineIluminacao(); // Posiciona e orienta o observador glTranslatef(-obsX,-obsY,-obsZ); glRotatef(rotX,1,0,0); glRotatef(rotY,0,1,0); }

Visualização // Função usada para especificar o volume de visualização void EspecificaParametrosVisualizacao(void) { // 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); PosicionaObservador(); }

Teclas Especiais // Função callback para tratar eventos de teclas especiais void TeclasEspeciais (int tecla, int x, int y) { switch (tecla) case GLUT_KEY_HOME: if(angle>=10) angle -=5; break; case GLUT_KEY_END: if(angle<=150) angle +=5; } EspecificaParametrosVisualizacao(); glutPostRedisplay();

Funções Mouse // Função callback para eventos de botões do mouse void GerenciaMouse(int button, int state, int x, int y) { if(state==GLUT_DOWN) // Salva os parâmetros atuais x_ini = x; y_ini = y; obsX_ini = obsX; obsY_ini = obsY; obsZ_ini = obsZ; rotX_ini = rotX; rotY_ini = rotY; bot = button; } else bot = -1;

Funções auxiliares de mov. Mouse // Função callback para eventos de movimento do mouse #define SENS_ROT 5.0 #define SENS_OBS 10.0 #define SENS_TRANSL 10.0 void GerenciaMovim(int x, int y) { // Botão esquerdo ? if(bot==GLUT_LEFT_BUTTON) // Calcula diferenças int deltax = x_ini - x; int deltay = y_ini - y; // E modifica ângulos rotY = rotY_ini - deltax/SENS_ROT; rotX = rotX_ini - deltay/SENS_ROT; }

// Botão direito ? else if(bot==GLUT_RIGHT_BUTTON) { // Calcula diferença int deltaz = y_ini - y; // E modifica distância do observador obsZ = obsZ_ini + deltaz/SENS_OBS; } // Botão do meio ? else if(bot==GLUT_MIDDLE_BUTTON) // Calcula diferenças int deltax = x_ini - x; int deltay = y_ini - y; // E modifica posições obsX = obsX_ini + deltax/SENS_TRANSL; obsY = obsY_ini - deltay/SENS_TRANSL; PosicionaObservador(); glutPostRedisplay();

Tamanho da Janela // Função callback chamada quando o tamanho da janela é alterado void AlteraTamanhoJanela(GLsizei w, GLsizei h) { // Para previnir uma divisão por zero if ( h == 0 ) h = 1; // Especifica as dimensões da viewport glViewport(0, 0, w, h); // Calcula a correção de aspecto fAspect = (GLfloat)w/(GLfloat)h; EspecificaParametrosVisualizacao(); }

// Função responsável por inicializar parâmetros e variáveis void Inicializa (void) { // Define a cor de fundo da janela de visualização como branca glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 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 a luz de número 1 glEnable(GL_LIGHT1); // Habilita o depth-buffering glEnable(GL_DEPTH_TEST);

// Habilita o modelo de colorização de Gouraud glShadeModel(GL_SMOOTH); // Inicializa a variável que especifica o ângulo da projeção // perspectiva angle=45; // Inicializa as variáveis usadas para alterar a posição do // observador virtual rotX = 0; rotY = 0; obsX = obsY = 0; obsZ = 150; }

// Programa Principal int main(void) { // Define do modo de operação da GLUT glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // Especifica a posição inicial da janela GLUT glutInitWindowPosition(5,5); // Especifica o tamanho inicial em pixels da janela GLUT glutInitWindowSize(450,450); // Cria a janela passando como argumento o título da mesma glutCreateWindow("Cubo RGB"); // Registra a função callback de redesenho da janela de visualização glutDisplayFunc(Desenha); // Registra a função callback de redimensionamento da janela de visualização glutReshapeFunc(AlteraTamanhoJanela); // Registra a função callback para tratamento das teclas normais glutKeyboardFunc (Teclado); // Registra a função callback para tratamento das teclas especiais glutSpecialFunc (TeclasEspeciais); // Registra a função callback para eventos de botões do mouse glutMouseFunc(GerenciaMouse); // Registra a função callback para eventos de movimento do mouse glutMotionFunc(GerenciaMovim); // Chama a função responsável por fazer as inicializações Inicializa(); // Inicia o processamento e aguarda interações do usuário glutMainLoop(); return 0; }