Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Visualização 3D Estruturas de Dados Básica (Global) para Construção de uma.

Slides:



Advertisements
Apresentações semelhantes
Movimento em I dimensão
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
E. M. Altina Olívia Gonçalves
Funções para serem usadas no exercício de Lab
O conceito de prisma Prisma é um sólido geométrico delimitado por faces planas, no qual as bases se situam em planos paralelos. Quanto à inclinação das.
Luiz Marcos Curvas paramétricas Luiz Marcos
03/08/2011 Professor Leomir J. Borba- –
1 – PERSPECTIVA ISOMÉTRICA
Matemática II aula 3 Profª Débora Bastos.
Sumário, aula 9 Elasticidade Elasticidade arco Elasticidade no ponto
Sumário, aula 10 Exercícios sobre elasticidade Elasticidade e despesa
Ensino Superior Cálculo 3 4. Derivadas Parciais Amintas Paiva Afonso.
7a. e 8a. Aulas – Correlação e Regressão
DIM102 1 Curvas e Superfícies 35T56 – Sala 3F4 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 227.
Computação Gráfica Interativa - Gattass
Computação Gráfica Interativa - 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.
Computação Gráfica: Aula2: Curvas e Superfícies
Formato OBJ.
Superfícies de Bézier Visualização 3D
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: Aula2: Curvas e Superfícies
Computação Gráfica: Aula2: Curvas e Superfícies
INTRODUÇÃO A ALGORITMOS NUMÉRICOS
Projeções Ortogonais – Desenho em Vistas
Computação Gráfica Iluminação e Texturas.
Gráfico da Função Quadrática
AULA 4 Função Exponencial.
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Folha de cálculo Conceitos básicos Criação de uma folha de cálculo
ESTATÍSTICA: O estudo numérico dos fatos sociais
Liane Tarouco CINTED/UFRGS
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Simulação Massa-Mola para Tecidos
Aula 27 Funções Vetoriais e curvas Espaciais, Continuidade, Derivada e Integral.
Aula 1: Funções de Várias Variáveis e Gráficos
Fundamentos Corel Draw Aula I Prof. David Bianchini
Vetores e Matrizes Laboratório de ICCN Marco Antonio Montebello Júnior
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Parte IX
Análise de modelos matemáticos por meio de simulações computacionais
Joana Pereira e Márcia Seguro
Funções e suas propriedades
Aula 18 Regra de LHospital. Introdução Determine caso exista o limite a seguir: Solução:
FUNÇÃO QUADRÁTICA (PÁGINA 135)
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 05 Aquiles Burlamaqui UERN
Computação Gráfica Aula 11 Curvas Prof. Leo.
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Aula 8: Array Professores: Sandro Rigo Túlio Bender.
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};
Integrais Triplas em Coordenadas Cilíndricas
Introdução à Computação Gráfica Curvas
TRANSFORMAÇÕES DE TENSÕES
Computação Gráfica Introdução ao OpenGL.
Cálculos 8.0 Cálculo de Fundações © Célio Silvestre
SÓLIDOS GEOMÉTRICOS E VOLUMES.
Desenhos Tridimensionais
Computação Gráfica – Introdução ao OpenGL
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 à.
Cálculo II 3. Derivadas Parciais.
Viewport.
Regressão e Previsão Numérica.
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.
AULA 8 – CÁLCULO COM GEOMETRIA ANALÍTICA II
Pesquisa realizada por Gilda de La Rocque Palis (PUC-RIO)
CÁLCULO COM GEOMETRIA ANALÍTICA II Funções de várias variáveis
Construção de Algoritmos AULA 05
Aula 001. Ambiente de Trabalho Entre em lay out e configure sua página de trabalho Observe as medidas.
CÁLCULO NUMÉRICO. ZEROS REAIS DE FUNÇÕES REAIS Fase1: Isolamento das Raizes Teorema 1: Seja f(x) uma função contínua num intervalo [a,b]. Se f(a).f(b)
1 Computação Gráfica Prof. Dr. Júlio C. Klafke UNIP-Objetivo
Superfícies de Bézier Visualização 3D
Transcrição da apresentação:

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Visualização 3D Estruturas de Dados Básica (Global) para Construção de uma Superfície Bézier 3D: // Pontos de controle da Bézier (Ver teoria da Sala de Aula) GLfloat pontos[4][4][3] = { {{0.0, 0.0, 0.0}, {0.3, 0.5, 0.0}, {0.7, 0.5, 0.0}, {1.0, 0.0, 0.0}}, {{0.0, 0.0, 0.3}, {0.3, 0.5, 0.3}, {0.7, 0.5, 0.3}, {1.0, 0.0, 0.3}}, {{0.0, 0.0, 0.7}, {0.3, 0.5, 0.7}, {0.7, 0.5, 0.7}, {1.0, 0.0, 0.7}}, {{0.0, 0.0, 1.0}, {0.3, 0.5, 1.0}, {0.7, 0.5, 1.0}, {1.0, 0.0, 1.0}} }; #define SENS_ROT5.0 #define SENS_OBS15.0 #define SENS_TRANSL30.0

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Visualização 3D Estruturas de Dados Básica (Global) para Construção de uma Superfície Bézier: // Pontos de controle da Bézier (Ver teoria da Sala de Aula) GLfloat pontos[4][4][3] = { {{0.0, 0.0, 0.0}, {0.3, 0.5, 0.0}, {0.7, 0.5, 0.0}, {1.0, 0.0, 0.0}}, {{0.0, 0.0, 0.3}, {0.3, 0.5, 0.3}, {0.7, 0.5, 0.3}, {1.0, 0.0, 0.3}}, {{0.0, 0.0, 0.7}, {0.3, 0.5, 0.7}, {0.7, 0.5, 0.7}, {1.0, 0.0, 0.7}}, {{0.0, 0.0, 1.0}, {0.3, 0.5, 1.0}, {0.7, 0.5, 1.0}, {1.0, 0.0, 1.0}} };

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Para Construir a Bézier, são necessários principalmente: Uma estrutura de Dados (slide anterior) e as funções a seguir: // Função para calcular a Bézier (Chamada de dentro da inicializa) // Define significado dos pontos de controle glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &pontos[0][0][0]); // Ativa geração de coordenadas glEnable(GL_MAP2_VERTEX_3);

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Explicação mais Detalhada // Função para calcular a Bézier (Chamada de dentro da inicializa) // Define significado dos pontos de controle glMap2f(GL_MAP2_VERTEX_3,GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat *pontos); GL_MAP2_VERTEX_3: significado dos pontos de controle. Outras opções podem ser: GL_MAP2_VERTEX_4, GL_MAP2_INDEX, GL_MAP2_COLOR_4, GL_MAP2_NORMAL, GL_MAP2_TEXTURE_COORD_1, GL_MAP2_TEXTURE_COORD_2, GL_MAP2_TEXTURE_COORD_3 e GL_MAP2_TEXTURE_COORD_4. u1 e u2, v1 e v2 definem os intervalos para as variáveis de controle em duas dimensões.

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Explicação mais Detalhada // Função para calcular a Bézier (Chamada de dentro da inicializa) // Define significado dos pontos de controle glMap2f(GL_MAP2_VERTEX_3,GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat *pontos); Os valores ustride e vstride indicam quantos valores float existem entre cada elemento do vetor no sentido horizontal (ustride) e vertical (vstride) Os parâmetros uorder e vorder devem conter a quantidade de elementos nos dois sentidos *pontos é um ponteiro para a estrutura de dados onde são guardados os pontos de controle.

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Explicação mais Detalhada Finalmente, glEvalCoord2f(i,j) é a função que avalia os pontos de controle nas coordenadas definidas por glMap2f Relembrando da Teoria: Curva de Bézier de grau 3 Parâmetros avaliados com o uso da função glEvalCoord2f Pontos de controle

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função de Avaliação (Chamada de dentro das macros de desenho (glBegin/Ebd)) // Traça a superfície for(float j=0; j<=1.01; j+=delta) { glBegin(GL_LINE_STRIP); // desenha (avalia) uma dimensão for(float i=0; i<=1.01; i+=delta) glEvalCoord2f(i,j); glEnd(); glBegin(GL_LINE_STRIP); // desenha (avalia) a segunda dimenção for(float i=0; i<=1.01; i+=delta) glEvalCoord2f(j,i); glEnd(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Sugestão de ClallBacks para serem usadas: // 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); // Registra a função callback para tratamento das teclas normais glutKeyboardFunc (Teclado); // Registra a função callback para tratamento das teclas especiais glutSpecialFunc (TeclasEspeciais);

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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 para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função callback para eventos de movimento do mouse 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; }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função callback para eventos de movimento do mouse (Continuação) // 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(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função responsável por inicializar parâmetros e variáveis (Chamada na Função Principal) void Inicializa (void) { // Define significado dos pontos de controle (explicação acima) glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &pontos[0][0][0]); // Ativa geração de coordenadas glEnable(GL_MAP2_VERTEX_3); (explicação acima) // Define a cor de fundo da janela de visualização como branca glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Inicializa a variável que especifica o ângulo da projeção // perspectiva angle=60; // Inicializa as variáveis usadas para alterar a posição do // observador virtual rotX = 0; rotY = 0; obsX = obsY = 0; obsZ = 5; }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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; break; } EspecificaParametrosVisualizacao(); glutPostRedisplay(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função callback chamada para gerenciar eventos de teclas void Teclado (unsigned char key, int x, int y) { switch(key) { case '-':if(prec>2) prec--; break; case '+':prec++; break; case 27:exit(0); break; } glutPostRedisplay(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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ções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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.1,1200); PosicionaObservador(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) Explicação mais Detalhada // Especifica a projeção perspectiva(angulo,aspecto,zMin,zMax) GLvoid gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble nearClip, GLdouble farClip ) Um Grande fovy é como olhar através de uma lente grande Um pequeno fovy é como olhar através de um telescópio O aspecto é a largura/altura do plano de projeção

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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(); // Posiciona e orienta o observador glTranslatef(-obsX,-obsY,-obsZ); glRotatef(rotX,1,0,0); glRotatef(rotY,0,1,0); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // 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); // Altera a cor do desenho para preto glColor3f(0.0f, 0.0f, 0.0f); // Calcula incremento de acordo com o total // de pontos intermediários float delta = 1.0/(float)prec;

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função callback de redesenho da janela de visualização (Continuação) // Traça a superfície for(float j=0; j<=1.01; j+=delta) { glBegin(GL_LINE_STRIP); for(float i=0; i<=1.01; i+=delta) glEvalCoord2f(i,j); glEnd(); glBegin(GL_LINE_STRIP); for(float i=0; i<=1.01; i+=delta) glEvalCoord2f(j,i); glEnd(); }

Funções para serem usadas no exercício de Lab nos dias (18/03/2010 e 24/03/10) // Função callback de redesenho da janela de visualização (Continuação) // Muda a cor para vermelho glColor3f(1.0f, 0.0f, 0.0f); // Define tamanho de um ponto glPointSize(5.0); // Desenha os pontos de controle glBegin(GL_POINTS); for(int i=0; i<4; ++i) for(int j=0; j<4; ++j) glVertex3fv(pontos[i][j]); glEnd(); // Executa os comandos OpenGL glFlush(); }