Superfícies de Bézier Visualização 3D

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
Advertisements

E. M. Altina Olívia Gonçalves
Funções para serem usadas no exercício de Lab
Retas.
Amintas engenharia.
AULA 18 VETORES II MARTA REBUÁ.
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
ESTIMAÇÃO.
Matemática II aula 3 Profª Débora Bastos.
9 Março 2007Matrizes e Gráficos - Trajectória de um Projéctil1 Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2007/2008.
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009.
Ensino Superior Cálculo 3 4. Derivadas Parciais Amintas Paiva Afonso.
Introdução a OpenGL (parte final).
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
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática PUC-Rio.
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.
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.
Computação Gráfica: Aula2: Curvas e Superfícies
Formato OBJ.
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: Rendering e Rasterização
Computação Gráfica: Aula2: Curvas e Superfícies
Desenho Técnico e CAD – Prof. Dennis Coelho Cruz – Projeções no DraftSight TOPOGRAFIA AULA 8.
Ponteiros.
Computação Gráfica Iluminação e Texturas.
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
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
IMPULSO E QUANTIDADE DE MOVIMENTO
Teoria dos Grafos Caminhos e Noção de Grafos com pesos
Análise de modelos matemáticos por meio de simulações computacionais
Joana Pereira e Márcia Seguro
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.
CURVAS DE NÍVEL TOPOLOGIA – Estudo das formas da superfície terrestre e das leis que regem o seu modelado.
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};
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática PUC-Rio.
Distribuição Normal Prof. Herondino.
Computação Gráfica Introdução ao OpenGL.
Cálculos 8.0 Cálculo de Fundações © Célio Silvestre
Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin
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.
“Animação de Curvas em um Ambiente Computacional”
Viewport.
Regressão e Previsão Numérica.
AULA 8 – CÁLCULO COM GEOMETRIA ANALÍTICA II
Profa. Andrea Sell Dyminski UFPR 03/04/2007
Pesquisa realizada por Gilda de La Rocque Palis (PUC-RIO)
DERIVADAS – Área 3 – CÁLCULO COM GEOMETRIA ANALÍTICA II
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.
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:

Superfícies de Bézier 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_ROT 5.0 #define SENS_OBS 15.0 #define SENS_TRANSL 30.0

Superfícies de Bézier Para Construir a Superfície de Bézier são necessários principalmente: uma estrutura de Dados (slide anterior) e as funções a seguir: // Função para calcular a Superfície (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);

Explicação mais Detalhada Superfícies de Bézier Explicação mais Detalhada // Função para calcular a superfície (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.

Superfícies de Bézzier 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.

Superfícies de Bézier 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 Pontos de controle Parâmetros avaliados com o uso da função glEvalCoord2f

Superfícies de Bézier // 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 glEvalCoord2f(j,i); }

Superfícies de Bézier 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);

Superfícies de Bézier // 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;

Superfícies de Bézier // 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; }

Superfícies de Bézier // 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();

Superfícies de Bézier // 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; }

Superfícies de Bézier // 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();

Superfícies de Bézier // 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++; case 27: exit(0); } glutPostRedisplay();

Superfícies de Bézier // 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(); }

Superfícies de Bézier // 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(); }

Explicação mais Detalhada Superfícies de Bézier 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

Superfícies de Bézier // 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); }

Superfícies de Bézier // 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;

Superfícies de Bézier // 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(); glEvalCoord2f(j,i); }

Superfícies de Bézier // 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(); }