Exercício IV (2012/I)

Documentos relacionados
Computação Gráfica - 04

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 1o. Semestre de 2017 Prof.

Ambiente de programação

1ª Lista de Exercícios

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Comando de Seleção em Java

Algoritmos e Programação

Interactividade Básica com GLUT e Primitivas Geométricas

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Introdução à Programação C

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Tipos de Dados Simples (Continuação)

Laboratório de Programação II

Seleção Múltipla Laços (while, do-while, for) AULA 05

Prática - Linguagem C. Exercícios - Desenvolvendo um pequeno projeto

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE

O que é a modularização

INTRODUÇÃO À LINGUAGEM C++

Revisão para Prova 2. Mirella M. Moro

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE

Estruturas de controle Parte 1

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Microsoft Word 2010 NORMA ABNT para Trabalhos Acadêmicos Conceitos Básicos

Variáveis primitivas e Controle de fluxo

TUTORIAL DO BLOG IMES-CATANDUVA Profº M. Sc. Marcelo Mazetto Moala Profº Esp. Antonio Marcio Paschoal

Laços de repetição for, while, do-while

Primeira Prova 25 de abril de DURAÇÃO DA PROVA: 90m

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

LISTA DE ATIVIDADES Semestre Letivo 2018/1

RESUMO DE CONCEITOS BÁSICOS DE C

Conceitos básicos de programação

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação: Vetores

Tecnologias de Jogos de Vídeo

Cap. 2: Executando o Cálculo de Volumes

Programação das Aulas

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

O JasperReports Studio é uma ferramenta de software que oferece um ambiente visual para criar relatórios para a plataforma Java. É open source.

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Características da Linguagem C

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Aula 05: Condicionais (Parte 2)

Desenho assistido por computador I CAD I

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

CONDICIONAL / de SELEÇÃO / de DECISÃO

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2

Segunda Prova 20 de junho de DURAÇÃO DA PROVA: 90m

AGRUPAMENTO DE ESCOLAS DE EIXO CRTICEE EIXO/AVEIRO. Iniciação ao GRID 2 Resumo de alguns procedimentos

Problema do Caminho Hamiltoniano

Aula 2 Comandos de Decisão

INF 1620 P1-13/09/02 Questão 1 Nome:

Linguagem de Programação JAVA. Tiago Alves de Oliveira

Obrigado por utilizar o Sistema GeoOffice! Com certeza seus trabalhos ganharão maior agilidade e eficiência.

Criação e modificação de um modelo geológico Program: Estratigrafia

Programação de Computadores

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Estruturas de Controle - Seleção. Prof. César Melo

10 Comandos de repetição

Leitura Segura de Strings

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais

FOTOGRAFIA PUBLICITÁRIA. Edição de fotografias Profª Denise Silva

DURAÇÃO DA PROVA: 2 horas

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

Revisão C++ - Parte 1

Controle de Fluxo - Condicionais

Funções. Introdução à Computação para a Engenharia Ambiental

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Estruturas de Repetição

Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

Introducao a Programacao Estruturas de decisão

Cap. 3 Entrada e Saída e Controle de Fluxo

Introdução à Linguagem C++

Introdução à Engenharia ENG1000

Módulo 3 Controle de Fluxo

DAS5102 Fundamentos da Estrutura da Informação

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

CMP Técnicas de Programação 2 a Lista de Exercícios - Passagem de parâmetros por referência e ponteiros Max Gontijo de Oliveira

Teclado. PdP. Autor: Tiago Lone Nível: Básico Criação: 20/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Aula 4 Microsoft PowerPoint 2003: Criando uma Apresentação

Análise de Programação

Estruturas de Controle em c#

MAC110 Introdução à Computação EP no. 3 Prof. Dr. Paulo Miranda Instituto de Matemática e Estatística (IME) Universidade de São Paulo (USP)

Operadores e Estruturas de Decisão

Operadores e Estruturas de Decisão. Vanessa Braganholo

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

PROGRAMAÇÃO ORIENTADA A OBJETOS I. Prof. Me. Hélio Esperidião

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 5 ESTRUTURAS DE REPETIÇÃO EM C#

Transcrição:

Exercício IV (2012/I) Disciplina: Computação Gráfica Professora: Soraia R. Musse Aula prática Curvas e Superfícies O objetivo desta aula é trabalhar com os diferentes métodos para gerar curvas usando a biblioteca OpenGL. Você pode obter os códigos fontes que serão utilizados na aula de hoje na página da disciplina. Este programa possui implementações do exercício anterior. Inicialmente, verifique o conteúdo do programa fonte fornecido. Compile e execute o programa e verifique que aparecerá uma janela com fundo preto, com um grid representando o chão e 3 diferentes curvas. As matrizes float BezierPoints[4][3], float HermitePoints[4][3], float BSplinePoints[4][3], armazenam os pontos de controle e as tangentes (quando for o caso) de cada curva. O método desenhachao() é o responsável por desenhar o grid. A função desenhapontosdecontrole() é a função que desenha os caracteres vermelhos na janela, indicando onde estão situados cada ponto de controle/tangente e os identificando. O método glrasterpos3d(gldouble x, GLdouble y, GLdouble z) serve para indicar em qual posição da janela se deseja desenhar. O laço seguinte passa por todos os caracteres da string desejada e desenha cada um com o método glutbitmapcharacter(void*font, int character), onde o primeiro parâmetro é um apontador para uma constante que define a fonte. A função desenhanomes() desenha os nomes das curvas com o mesmo princípio. As funções desenhabezier(), desenhabspline() e desenhahermite(), são as funções de desenhos das curvas. Estas funções aplicam as matrizes de representação das curvas, como comentado na aula passada. Por exemplo, na função de desenho da curva Hermite a matriz é:

Na função desenhahermite() ela é aplicada no trecho de código: float b0 = 2*t*t*t - 3*t*t + 1; float b1 = -2*t*t*t + 3*t*t; float b2 = t*t*t - 2*t*t + t; float b3 = t*t*t - t*t; Após, para calcular as posições x, y, z do novo ponto da curva, cada ponto da estrutura HermitePoints[][] é multiplicado por um desses valores b0, b1, b2 e b3. Note que em cada uma das funções é executado um laço de 0 a 15. Este 15 é o nível de detalhe das curvas (Level Of Detail), ou seja, quantos pontos existirão nas curvas. Altere o código, substituindo os números 15 por uma variável de nome LOD. Declare essa variável como unsigned int no início do código e atribua o valor inicial 15. Após, adicione o código abaixo, que permite modificar essa variável LOD no teclado com as teclas + e - : void GerenciaTeclado(unsigned char key,int,int) if (key == 27) exit(0); switch(key) case '+': ++LOD; case '-': --LOD; if (LOD<2) LOD=2; default: glutpostredisplay(); Note que a condição if foi adicionada para evitar que fique poucos pontos, destruindo a curva. Logo, a curva necessita de pelo menos dois pontos. Inclua na função main: glutkeyboardfunc(gerenciateclado); para ativar a função do teclado, e teste para ver o resultado. Agora vamos fazer algumas alterações para permitir a manipulação dos pontos de controle/tangentes das curvas, o que irá permitir visualizar melhor os resultados e brincar com a curva. O primeiro passo é adicionar no início do código as seguintes variáveis:

bool bezier = false, hermite = false, bspline = false; bool p1 = false, p2 = false, p3 = false, p4 = false; Essas variáveis servirão para controlarmos qual curva e qual ponto de controle desejamos alterar. Tendo feito isso, na função GerenciaTeclado, adicione esse trecho de código: case '1': p1 = true; p2 = false; p3 = false; p4 = false; printf("\np1 selected."); case '2': p1 = false; p2 = true; p3 = false; p4 = false; printf("\np2 selected."); case '3': p1 = false; p2 = false; p3 = true; p4 = false; printf("\np3 selected."); case '4': p1 = false; p2 = false; p3 = false; p4 = true; printf("\np4 selected."); Este código irá permitir a seleção do ponto de controle desejado através dos números 1, 2, 3 e 4 do teclado (No caso da Hermite, o 3 e o 4 selecionam as tangentes). Após crie uma função GerenciaTecladoEspecial, que irá gerenciar teclas especiais, de acordo com o código abaixo: void GerenciaTecladoEspecial(int key, int x, int y) switch (key) case GLUT_KEY_F1: bezier = false; hermite = false; bspline = true; printf("\nbspline active."); case GLUT_KEY_F2: bezier = false; hermite = true; bspline = false; printf("\nhermite active."); case GLUT_KEY_F3: bezier = true; hermite = false; bspline = false; printf("\nbezier active."); glutpostredisplay(); Com este código, as teclas F1, F2 e F3 se tornam as teclas de seleção da curva que será alterada: F1 para BSpline, F2 para Hermite e F3 para Bezier. Agora vamos adicionar um trecho de código (dentro desta mesma função) para alterar as posições dos pontos de controle/tangentes que serão selecionados. A tecla GLUT_KEY_LEFT,

irá mover o ponto selecionado para a esquerda, e a tecla GLUT_KEY_RIGHT irá mover o mesmo para a direita: case GLUT_KEY_LEFT: if (bezier) if (p1) BezierPoints[0][0] -= 0.2; if (p2) BezierPoints[1][0] -= 0.2; if (p3) BezierPoints[2][0] -= 0.2; if (p4) BezierPoints[3][0] -= 0.2; if (hermite) if (p1) HermitePoints[0][0] -= 0.2; if (p2) HermitePoints[1][0] -= 0.2; if (p3) HermitePoints[2][0] -= 0.2; if (p4) HermitePoints[3][0] -= 0.2; if (bspline) if (p1) BSplinePoints[0][0] -= 0.2; if (p2) BSplinePoints[1][0] -= 0.2; if (p3) BSplinePoints[2][0] -= 0.2; if (p4) BSplinePoints[3][0] -= 0.2; case GLUT_KEY_RIGHT: if (bezier) if (p1) BezierPoints[0][0] += 0.2; if (p2) BezierPoints[1][0] += 0.2; if (p3) BezierPoints[2][0] += 0.2; if (p4) BezierPoints[3][0] += 0.2; if (hermite) if (p1) HermitePoints[0][0] += 0.2; if (p2) HermitePoints[1][0] += 0.2; if (p3) HermitePoints[2][0] += 0.2; if (p4) HermitePoints[3][0] += 0.2; if (bspline) if (p1) BSplinePoints[0][0] += 0.2; if (p2) BSplinePoints[1][0] += 0.2; if (p3) BSplinePoints[2][0] += 0.2; if (p4) BSplinePoints[3][0] += 0.2;

Não se esqueça de adicionar também na função main o método glutspecialfunc(gerenciatecladoespecial) para ativar a função do teclado. Para manipular o ponto P1 da curva de Bezier, por exemplo, pressione F3 para selecionar a curva de Bezier, e em seguida pressione 1 para selecionar o ponto P1. Execute o programa e teste para ver os resultados. Agora faça a mesma coisa para as teclas GLUT_KEY_UP e GLUT_KEY_DOWN, para que estas movam o ponto para cima e para baixo (incrementando e decrementando a coordenada y). Também adicione as teclas GLUT_KEY_PAGE_UP e GLUT_KEY_PAGE_DOWN, de forma com que elas incrementem e decrementem a coordenada z do ponto. Exercício: Tente alterar o código para criar outro segmento de curva (escolha a curva de sua preferência: Bezier, Hermite ou BSpline) e conectá-la ao outro segmento correspondente no grau de conectividade C0 (somente unir o ponto final da primeira com o ponto inicial da segunda).