Programação Multimédia - 2 º Semestre (2007/2008)



Ficha da Disciplina

Docente

Jorge Cardoso ()
Gabinete: Edifício de Restauro, 2º andar, gabinete G17
Horário de atendimento: Segunda-feira, das 15h30 às 17h00

Descrição da Disciplina

A programação de computadores é cada vez mais uma ferramenta essencial para os artistas e para os profissionais da área multimédia. Não só porque abre um novo leque de possibilidades no que concerne à criação artística, mas porque cada vez mais as equipas de trabalho são interdisciplinares e o conhecimento do vocabulário da computação facilita a comunicação com os profissionais da área.

A cadeira de Programação para Multimédia é uma cadeira de introdução à programação de computadores. Não é necessária experiência prévia de programação por parte do aluno.

Esta disciplina pretende fornecer aos alunos uma oportunidade para contactarem com conceitos de algoritmia e conceitos gerais sobre linguagens de programação. O aluno será incentivado a estruturar o pensamento de forma a resolver problemas através da programação do computador.

Será utilizada a linguagem de programação Processing -- uma linguagem desenhada para a programação de imagem, animação e som -- para ilustrar os conceitos abordados.

No final da disciplina, pretende-se que os alunos possuam as ferramentas necessárias para abordar outras linguagens de programação.

Objectivos da Disciplina

Apreensão dos conceitos fundamentais de algoritmia e de linguagens de programação imperativas.
Capacidade de perceber, analisar e modificar um programa de computador.
Entender as principais estruturas de programação: variáveis, condicionais, ciclos e módulos.
Capacidade de construir programas em Processing que utilizem imagem (2D/3D), animação, som, reprodução e captura de vídeo e interacção com o utilizador.


Avaliação

O regime de avaliação de conhecimentos na disciplina de Programação Multimédia é o de Avaliação Contínua.
A avaliação consistirá em três pontos de avaliação: exercícios quinzenais durante o semestre; um micro-projecto[1] a desenvolver durante o semestre; e a assiduidade às aulas.

A avaliação é composta pela seguinte ponderação:

Exercícios Quinzenais 

14 valores

EQ0

0.5 valores

 

EQ1

6 valores

 

EQ2

4 valores

 

EQ3

2 valores

 

EQ4

1 valor

 

EQ5

0.5 valores

 

Micro-projecto

5 valores

1ª Fase

2 valores

 

Código Final

2 valores

 

Relatório Final

1 valor

 

 

 

 

Assiduidade

 

1 valor

É imperativa a entrega atempada dos exercícios quinzenais! Trabalhos entregues fora da data limite não serão avaliados.

Recurso

Notas finais acima de sete valores possibilitam a realização de um Exame de Recurso.

Programa

Semana

Aula

Exercícios Quinzenais

1

Apresentação da disciplina
Mostra de trabalhos
Apresentação e atribuição dos temas dos micro-projectos

Entrega EQ0

2

Tópicos Básicos:

  • Introdução à programação
  • Variáveis

 

3

Tópicos Básicos:

  • Estruturas de selecção

Entrega EQ1

4

Tópicos Básicos:

  • Ciclos

 

5

Tópicos Básicos:

  • Vectores

Entrega EQ2

6

Tópicos Básicos:

  • Funções, Métodos

 

7

Tópicos Básicos:

  • Funções, Métodos (continuação)

Entrega EQ3

8

Tópicos Intermédios:

  • Interacção com rato e teclado

 

9

Tópicos Intermédios:

  • Classes, Objectos

Entrega EQ4

10

 Tópicos Intermédios:

  • Imagem
  • Captura de vídeo (webcam)

 

11

Tópicos Avançados:

  • Comunicação OSC
  • Movimentos reais (physics)

Entrega EQ5

12

Tópicos Avançados:

  • Controlo dos Lego Mindstorms NXT

 

13

Laboratório micro-projecto

Entrega 1ª Fase micro-projecto

14

Laboratório micro-projecto

 

15

Apresentação dos micro-projectos

 

Site da disciplina

http://teaching.jorgecardoso.eu/pm/

Material/Bibliografia

  1. Sebenta de Programação Multimédia (fornecida ao longo das aulas)
  2. Material de Apoio (disponibilizado no centro de cópias ou no sítio Web da disciplina)
  3. Fórum Português sobre Processing: http://processing.jorgecardoso.eu
  4. João Pedro Neto, Programação, Algoritmos e Estruturas de Dados, Escolar Editora; 2004
  5. Marques de Sá, Fundamentos de Programação usando C, FCA; 2004
  6. Sítio web do Processing -- http://www.processing.org

Anexo: Lista de micro-projectos

1 - Windmill

Descrição

Usar o kit Lego Mindstorms NXT para criar um programa que coloque em funcionamento uma ventoinha real e outra virtual quando o utilizador soprar para o microfone. Neste caso o robô deverá ter a forma de um moinho de vento e deve ter incorporado o sensor de som.

 

1ª Fase:

Simular a intensidade do sopro com o rato (ponteiro perto do lado esquerdo baixa intensidade; do lado direiro, alta intensidade) e “rodar” uma ventoinha virtual (imagem) no ecrã de acordo com a intensidade.

 

2ª Fase:

Incorporar a ventoinha real (Legos).

 

2 - Bubbles Screensaver

Descrição

Criar um programa que consista no movimento de várias “bolhas” no ecrã. As bolhas colidem com os limites do ecrã ou com outras bolhas e fazem richochete. As bolhas têm tamanhos e velocidades diferentes.

 

1ª Fase:

Implementar o movimento de várias bolhas (círculos) de tamanhos e velocidades diferentes e a colisão com os limites do ecrã.

 

2ª Fase:

Implementar a colisão entre bolhas. Modificar o aspecto das bolhas e usar gráficos vectoriais para poder reutilizar o mesmo gráfico escalado para vários tamanhos sem perder qualidade. Usar bolhas de cores diferentes. Usar a ferramenta Processing Screensavers e ver o resultado como screensaver do Windows.

 

3 - Visual Sound Scape

Descrição

Criar uma paisagem visual para representar uma paisagem sonora.

 

1ª Fase:

Pensar numa composição abstracta de formas, movimentos, cores para representar as possíveis variações de som no Bar da EA. Implementar essa composição de forma simulada, i.e., pressionando a tecla ‘A’ (por exemplo) simulámos um nível de som baixo, pressionando em ‘B’ simulámos um nível de som alto, pressionando em ‘C’ simulámos a existência de sons de baixa frequência, pressionando em ‘D’ simulamos a existência de sons de alta frequência, etc.

 

2ª Fase:

Usar uma biblioteca que permita obter o áudio de um microfone e analisá-lo. Ligar o resultado da análise à composição gerada.

 

4 - Bluetooth Scape

Descrição

Ideia semelhante ao projecto anterior.

Criar uma composição abstracta de formas, movimentos, cores, etc, para representar movimentação de dispositivos Bluetooth numa sala (entrada, saída, tipos de dispositivos, marcas, etc).

 

1ª Fase:

Pensar numa composição abstracta de formas, movimentos, cores para representar as possíveis variações de dispositivos Bluetooth no Bar da EA. Implementar essa composição de forma simulada, i.e., pressionando a tecla ‘A’ (por exemplo) simulámos a entrada de um dispositivo da marca X, pressionando em ‘B’ simulámos a entrada de um dispositivo da marca Y, pressionando em ‘1’ simulámos a saída do último dispositivo, etc

 

 

2ª Fase:

Utilizar a ferramenta DiABlu Scout (http://diablu.jorgecardoso.eu) e a biblioteca OSC do Processing e fazer a ligação entre a entrada e saída de dispositivos reais e a composição criada.

 

5 - Blue Life

Descrição

Ideia semelhante ao projecto anterior, mas a composição gerada não é uma composição abstracta.

Fazer um mapeamento directo entre dispositivos Bluetooth presentes no Bar da EA e a existência de ‘bichos’ no ecrã. Os ‘bichos’ devem mover-se pelo ecrã enquanto o dispositivo Bluetooth correspondente estiver presente. Os ‘bichos’ devem ter aspectos diferentes consoante as características do dispositivo Bluetooth (exemplo: telemóveis – bichos pequenos, PDA – bichos médios, Laptops – bichos grandes; nokia – bicho azul, siemens – bicho vermelho, etc).

 

1ª Fase:

Implementar apenas a presença de elementos básicos no ecrã para representar dispositivos (quadrados, círculos, etc). Simular a entrada e saída de dispositivos, i.e., pressionando a tecla ‘A’ (por exemplo) simulámos a entrada de um dispositivo da marca X, pressionando em ‘B’ simulámos a entrada de um dispositivo da marca Y, pressionando em ‘1’ simulámos a saída do último dispositivo, etc.

 

 

2ª Fase:

Utilizar a ferramenta DiABlu Scout (http://diablu.jorgecardoso.eu) e a biblioteca OSC do Processing e fazer a ligação entre a entrada e saída de dispositivos reais e a existência dos elementos no ecrã. Criar gráficos interessantes para representar os bichos.

 

6 – Blue Graphics

Descrição

Criar gráficos da presença de dispositivos Bluetooth no Bar da EA.

Mostrar: o número de vezes que um dispositivo entrou e saiu. Mostrar o número de dispositivos de cada marca. Os gráficos devem ser desenhado em tempo-real.

 

 

1ª Fase:

Implementar as variáveis necessárias para guardar os dados e os desenhos dos gráficos (de barras, tarte, etc).

 

 

2ª Fase:

Utilizar a ferramenta DiABlu Scout (http://diablu.jorgecardoso.eu) e a biblioteca OSC do Processing e fazer a ligação entre a entrada e saída de dispositivos reais e os gráficos.

 

 

7 - These Guys!

Descrição

Modificar as caras das pessoas obtidas através de uma webcam com elementos postiços: bigodes, óculos, cabelo, chapéus, barba, etc. Os elementos postiços adicionados devem ser diferentes. O programa deve funcionar para uma cara de cada vez.

 

1ª Fase:

Simular a posição da cara da pessoa no ecrã com o rato e com as teclas simular o afastamento da pessoa (caras mais pequenas ou maiores). Criar alguns elementos postiços básicos e adicioná-los na posição simulada da cara. Com outra tecla simula-se a saída da pessoa e a entrada de outra (mudar os elementos postiços).

 

 

2ª Fase:

Utilizar a biblioteca de detecção de faces do Processing e fazer a ligação com a fase anterior. Criar mais e melhores elementos postiços (gráficos vectoriais).

 

8 – Fractal Video

Descrição

Dividir o ecrã numa grelha e mostrar, sequencialmente, cada frame obtida de uma webcam numa célula dessa grelha. O programa deve transitar entre grelhas de tamanhos diferentes.

 

1ª Fase:

Implementar o programa apenas com uma grelha e usar uma imagem estática em vez de um vídeo.

 

 

2ª Fase:

Utilizar uma biblioteca de captura de vídeo e utilizar as frames do vídeo em vez da imagem estática. Programar mais grelhas e programar a transição entre grelhas.

 

9 – Vídeo Cube

Descrição

Mostrar um vídeo (obtido da webcam) num cubo. Cada frame do vídeo deve ser mostrada sequencialmente numa face diferente do cubo. O cubo deve estar em constante rotação.

 

1ª Fase:

Implementar o cubo em 3D e a sua rotação. O cubo deve ser criado face a face.

 

 

2ª Fase:

Aplicar como textura das faces do cubo as frames obtidas através de uma biblioteca de captura de vídeo.

 

10 – Book of Frames

Descrição

Mostrar um vídeo (obtido da webcam) num objecto tri-dimensional a simular um livro. Cada frame do vídeo deve ser mostrada sequencialmente numa ‘página’ do livro. A frame anterior deve ser virada como uma folha para mostrar a nova frame.

 

1ª Fase:

Implementar o objecto tri-dimensional (três faces) e a animação da folha.

 

 

2ª Fase:

Aplicar como textura das faces as frames obtidas através de uma biblioteca de captura de vídeo.

 

11 – In Human Body

Descrição

Criar uma marioneta virtual: criar um esqueleto de um corpo humano usando a biblioteca de partículas traer.physics, usando “molas” para representar os ossos. Ligar alguns ‘fios’ aos pontos mais importantes e pré-programar movimentos. Cada parte do corpo deve ser representada com gráficos correspondentes (imagens de braços, pernas, etc).

 

1ª Fase:

Criar as imagens das várias partes do corpo e implementar a forma de as desenhar conhecendo apenas os ponto-chave, i.e., definir variáveis para as posições dos cotovelos, ombros, joelhos, etc. Definir algumas posições concretas para esses pontos. Implementar o desenho dos braços, pernas, etc, de forma independente da posição desses pontos.

 

2ª Fase:

Usar a biblioteca traer.physics para criar os pontos e ligações entre eles. Implementar um movimento contínuo.

 

12 – Linked Search

Descrição

Mostrar o resultado de buscas encadeadas no motor de busca Yahoo!, i.e., começar por procurar uma palavra qualquer e mostrar o primeiro resultado dessa busca, escolher uma palavra qualquer do resultado da busca anterior e recomeçar o processo. Mostrar no ecrã o texto das várias buscas sucessivas. Os textos devem ser posicionados em posições aleatórias no ecrã e devem ir desvanecendo.

 

1ª Fase:

Implementar apenas o posicionamento do texto e o desvanecer.

 

2ª Fase:

Usar a biblioteca de busca do Yahoo! para Processing e ligá-la à fase anterior.

 



[1]  A lista dos micro-projectos pode ser consultada em anexo.