1. Introdução 2. Ficheiro de descrição das cenas

Transcrição

1. Introdução 2. Ficheiro de descrição das cenas
Programação 2008/2009
MEEC - MEAer
Projecto de Programação - moviemaker
1. Introdução
A produção de animações recorrendo a sistemas informáticos viu um grande
desenvolvimento nos últimos anos. Nestes filmes, são usadas linguagens de descrição
das cenas, que descrevem cada fotograma, para o qual é gerada uma imagem. Após a
geração de todos os fotogramas (são necessários 30 fotogramas para cada segundo de
filme) estes são agrupados num ficheiros de texto.
No projecto a realizar pelos alunos, será desenvolvido um programa, chamado
moviemaker, que a partir de um ficheiro com a descrição de uma cena (objectos e a sua
movimentação) produz vários fotogramas.
O programa a realizar pelos alunos deverá ler um ficheiro com a descrição de uma cena.
Nesta descrição está incluída a criação de objectos (pontos, linhas e outras figuras
geométricas) numa determinada posição, a manipulação desses objectos (deslocamentos,
redução/ampliação e destruição) assim como a geração do fotograma (fotografia dos
estado dos objectos num determinado momento).
2. Ficheiro de descrição das cenas
O ficheiro com a descrição das cenas é composto por comandos ordenados que serão
interpretados e executados sequencialmente. Estes comando podem ser de:
• Criação de objectos
• Manipulação de objectos
• Destruição e objectos
• Geração de fotograma
Comando_criacao
Translacao_objecto
Rotacao_objecto_cg
Rotacao_objecto_pt
Redimens_objecto
Geracao_fotograma
Eliminacao_objecto
\n
Entre cada comando pode aparecer uma ou mais linhas em branco.
2.1. Criação de objectos
Para realizar a criação de objectos deverá aparecer no ficheiro a seguinte informação:
• Nome
• Número de vértices
• Cor
• Coordenadas dos diversos vértices.
A estrutura do comando de criação de um objecto é a seguinte:
N
\n
Nome
N_vértices
vértices
cor
\n
\n
Na primeira linha aparece o caracter N e na segunda aparece um nome, seguido do
número de vértices e de uma cor. Nas linhas seguintes aparecem as coordenadas dos
vários vértices.
Se o número de vértices for 0 (zero), não será criado nenhum objecto.
Após a leitura da informação este objecto deve ser armazenado em memória, podendo
ser manipulado pelos comandos de manipulação. Aparece em todos os fotogramas até
que seja destruído.
Nome
O nome de uma figura é uma sequência de caracteres sem espaços ou tabs. Podem
existir vários objectos com o mesmo nome.
N_vertices
O número de vértices (N_vertices) é um número inteiro, maior que zero. Se aparecer um
número de vértices menor ou igual a zero não deverá ser criado esse objecto,
continuando a leitura do ficheiro.
Os vértices lidos corresponderão aos extremos dos segmentos de recta que compõem o
objecto: para criar um quadrado serão necessários 5 vértices!
Cor
Na criação do objecto a cor com que ele será desenhado pode ser um inteiro, positivo ou
negativo. Se for positivo só são desenhadas as linhas que ligam os vértices consecutivos,
se a cor for negativa o objecto é também preenchido.
Os valores a usar na definição dos objectos serão os seguintes:
Vértices
Para cada vértice deverão ser definidas as suas coordenadas, dois números inteiros
separados por um espaço. O primeiro valor corresponde à coordenada X, o seguinte à
coordenada Y.
Exemplos
N
A1 4 4
50 50
50 100
100 100
100 50
N
Q1 5 4
50 50
50 100
100 100
100 50
50 50
N
Q2 5 -4
50 50
50 100
100 100
100 50
50 50
2.2. Manipulação de objectos
Existem diversos tipos possíveis de manipulação dos objectos previamente criados:
• Translação
• Rotação sobre centro geométrico
• Rotação sobre um ponto
• Redimensionamento
Para cada tipo de manipulação é usado um identificador (T, R, C, S) que aparece
separado numa linha e precede os seus parâmetros.
Um destes parâmetros é o nome do objecto sobre o qual aplicar a manipulação. A
manipulação deverá será aplicada a todos os objectos cujo nome é igual ao parâmetro.
Se o utilizador usar o valor all, a transformação será aplicada a todos os objectos
existentes.
As alterações descritas com este comando são cumulativas, a segunda operação vai
manipular o objecto na nova posição e não na original.
2.3. Translação
Esta operação (T) permite movimentar linearmente um ou vários objectos. O primeiro
parâmetro é o nome do ou dos objectos a deslocarem-se. Os outros dois parâmetros
correspondem à distância deslocada em cada um dos eixos:
Delta_x
É um inteiro positivo ou negativo que corresponde à distancia que o objecto se deve
deslocar sobre o eixo X. Se for positivo o objecto desloca-se para a direita, se for negativo
desloca-se para a esquerda
Delta_y
É um inteiro positivo ou negativo que corresponde à distancia que o objecto se deve
deslocar sobre o eixo Y. Se for positivo o objecto desloca-se para cima, se for negativo
desloca-se para baixo.
Exemplo
Antes
Comando
Depois
T
A1 50 25
2.4. Rotação sobre centro geométrico
Esta operação permite a rotação de um objecto sobre o seu centro geométrico, calculado
apenas com os vértices. O primeiro parâmetro é o nome do ou dos objectos a serem rodados, o segundo é o angulo de rotação em graus.
R
\n
Nome
Angulo
\n
Ângulo
É um valor numérico positivo ou negativo que corresponde ao angulo de rotação do
objecto. Se for positivo o objecto roda no sentido dos ponteiros dos relógios, se for
negativo roda no sentido contrário.
Exemplo
Antes
Comando
Depois
R
A1 90
Antes
Comando
Depois
R
A1 -45
2.5. Rotação sobre um ponto
Esta operação permite a rotação de um objecto em que o centro da rotação é um ponto
especificado como parâmetro. O primeiro parâmetro é o nome do ou dos objectos a
serem rodados, os seguintes são as coordenadas do centro de rotação (X e Y) e o último
é o angulo de rotação em graus.
Centro
O centro da rotação é composto por dois valores numéricos (centro_x e centro_y) que
representam as suas coordenadas. A rotação do objecto será realizada sobre este ponto.
Ângulo
É um valor numérico positivo ou negativo que corresponde ao angulo de rotação do
objecto. Se for positivo o objecto roda no sentido dos ponteiros dos relógios, se for
negativo roda no sentido contrário.
Exemplos
Antes
Comando
Depois
C
A1 25 0 -45
Antes
Comando
Depois
C
Q1 100 50 45
2.6. Redimensionamento
Esta operação permite o redimensionamento (ampliação ou redução) de um ou vários
objectos. Este redimensionamento será realizado garantindo-se que o centro geométrico
do objecto se mantêm inalterado. O primeiro parâmetros é o nome do ou dos objectos a
serem manipulados e o segundo valor é o factor de ampliação/redução.
S
\n
Nome
Escala
\n
Escala
Este valor numérico deve ser maior ou igual a zero. Se for inferior a 1 corresponde a uma
redução, se for maior que um será feita uma ampliação do objecto. Por exemplo,
aplicando um factor de escala de 0.5, obter-se-á um objecto com metade da largura e da
altura originais. Se for aplicado um factor de escala de 3 a um objecto, este ficará com a
largura e altura triplas das originais.
Exemplos
Antes
Comando
Depois
S
A1 2
S
A1 0.5
Antes
Comando
Depois
S
Q2 3
2.7. Destruição de objectos
Este comando permite a eliminação de um ou mais objectos. Recebe como parâmetro um
nome.
Nome
Se existirem vários objectos com nome semelhante ao parâmetro deste comando, todos
esses objectos são eliminados, não aparecendo nos fotogramas posteriores. Se aparecer
a palavra all, todos os objectos são eliminados.
2.8. Geração de Fotograma
Este comando não tem parâmetros. Quando ocorre é gerado uma imagem com a
“fotografia” do estado de todos os objectos. São desenhados os objectos na sua posição
corrente.
2.9. Exemplo
Apresenta-se de seguida uma série de comandos assim como as imagens geradas, estes
comandos estariam num único ficheiro de texto, que seria processado e dos quais seriam
geradas sequencialmente as imagens apresentadas à direita.
O ficheiros com estes comando, assim como as imagens geradas podem ser obtidas no
site da cadeira.
Comandos
N
A1 4 4
50 50
50 100
100 100
100 50
Imagem gerada
Comandos
S
A1 0.5
P
P
T
A1 50 25
C
A1 25 0 -45
P
P
R
A1 90
E
A1
P
P
R
A1 -45
N
Q2 5 -4
50 50
50 100
100 100
100 50
50 50
P
P
S
A1 2
S
Q2 3
P
P
Imagem gerada
Comandos
Imagem gerada
E
Q2
P
N
Q1 5 4
50 50
50 100
100 100
100 50
50 50
Comandos
Imagem gerada
C
Q1 100 50 45
P
C
Q1 100 50 45
P
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
3. Ficheiros de saída
Sempre que, no ficheiro de descrição de cenas, aparece o comando P, é gerada uma
imagem numerada sequencialmente. A imagem gerada é do formato png com as
dimensões de 640×480. O primeiro fotograma gerado deve-se chamar
movie00000000.png, o segundo movie00000001.png e assim sucessivamente.
Neste ficheiro são desenhados os objecto existentes na cena nas suas posições
absolutas: um objecto cujas coordenadas sejam negativas ou superiores às dimensões da
imagem não aparecerá.
4. Execução
Quando invocado sem parâmetros o programa de geração de filmes lê um ficheiro com a
descrição da cena chamado scene.scn. Cada fotograma a gerar terá as dimensões de
640x480 (640 colunas por 480 linhas) e é armazenado em ficheiro com o formato png. O
nomes dos ficheiros dos fotogramas é composto por um prefixo (movie), seguido do número do fotograma (00000000, 00000001, ..., 00000099, ...) seguido da extensão (.png).
4.1. Argumentos da linha de comando
Usando os argumentos da linha de comando deverá ser possível:
• Usar ficheiro com descrição de cenas com nomes distintos de scene.scn
• Gerar fotogramas com prefixo diferente de movie
• Gerar fotogramas com dimensões distintas de 640x480
Qualquer combinação dos argumentos aqui apresentados é possível.
-f nome_ficheiro
Usando o argumento –f será possível ler cenas de ficheiros com nomes distintos de
scene.scn . O nome do ficheiros com a descrição da cena deverá aparecer após o
argumento –f e separados por um espaço.
Por exemplo, para se ler a descrição de uma cena a partir de um ficheiro chamado
cena2.txt deverá ser dado o comando moviemaker –f cena2.txt.
-m prefixo_fotograma
O argumento –m permite a geração de fotogramas com nomes diferentes do valor
predefinido (movie00000000.png, ...). O nome que ocorre após –m é o prefixo que será
usado na construção do nome dos diversos fotogramas.
Se invocarmos moviemaker –m cena2, serão gerados diversos ficheiros cujos nomes
começam por cena2: cena200000000.png, cena200000001.png, cena200000002.png, ...
-x dim_x
A largura predefinida para os fotogramas é de 640 colunas. Se se desejar criar
fotogramas com larguras diferentes, deve-se usar o parâmetros –x seguido do novo valor
da largura (inteiro positivo). Este argumento não altera a altura das imagens geradas.
Usando os parâmetros –x 1024 os fotogramas gerados terão 1024 colunas de largura.
-y dim_y
A altura predefinida para os fotogramas é de 480 linhas. Se se desejar criar fotogramas
com alturas diferentes, deve-se usar o parâmetros –y seguido do novo valor da altura
(inteiro positivo). Este argumento não altera a largura das imagens geradas.
Usando os parâmetros –x 768 os fotogramas gerados terão 768 linhas de altura.
4.2. Exemplo
O comando moviemake –f filme1.txt –m filme –x 800 –y 600 teria o seguinte
comportamento:
• O ficheiro lido com a descrição da cena chamar-se-ia filme1.txt
• Os fotogramas terão a seguinte dimensão: 800x600
•
O nome dos ficheiros dos fotogramas terão o seguinte formato: filme00000000.png,
filme00000001.png, filme00000002.png, ...
5. Geração de Fotogramas
Para a geração de fotogramas deverá ser utilizada a biblioteca G2:
• http://g2.sourceforge.net/g2_ref/
Esta biblioteca contêm uma série de funções para geração de imagens em diversos
formatos: inclui os mecanismos para criação dos ficheiros, assim como funções para
escrita de figuras gráficas (pontos, polilinhas e polígonos).
6. Documentação
O código produzido pelos alunos deverá ser comentado. Os comentários presentes no
código deverão explicitar e explicar o funcionamento da aplicação assim como as
decisões tomadas.
Deve também ser usada a norma seguida pela aplicação Doxygen, necessária à geração
da documentação relativa às funções implementadas:
7. Desenvolvimento do projecto
Sugere-se um desenvolvimento faseado do projecto, garantindo os alunos que todas as
funcionalidade codificadas até esse momento se encontram a funcionar correctamente.
É preferível um programa que implementa poucas funcionalidade, mas funcionam
correctamente, do que um programa cujos alunos tentaram desenvolver completamente mas que não faz nada.
Assim sugerem-se os seguintes passos, pela ordem apresentada, para realização do
projecto:
• Leitura do ficheiro com a descrição das cenas
• Criação de 1 objecto
• Geração de 1 fotogramas com 1 objecto
• Geração de vários fotogramas com 1 objecto
• Manipulação de 1 objecto
o Translação
o Rotação sobre um ponto
o Rotação sobre centro geométrico
o Ampliação/Redução
• Armazenamento de vários objectos
• Geração de fotogramas com vário objectos
• Manipulação de vários objecto
o Translação
o Rotação sobre um ponto
o Rotação sobre centro geométrico
o Ampliação/Redução
• Destruição de Objectos
• Argumentos da linha de comando
A implementação de algumas operações sobre um único objecto podem ser adiadas para
o momento em que o armazenamento de vários objectos se encontra a funcionar.
8. Avaliação
A avaliação do projecto terá em conta diversos parâmetros:
•
•
•
•
•
•
•
Qualidade do código produzido
Estruturação da aplicação
Estruturas de dados usados no armazenamento dos objectos
Comentários e documentação
Tratamento de erros
Funcionalidades implementadas
Discussão oral
8.1. Entrega intermédia
Será realizada uma entrega intermédia de código com a seguinte funcionalidade:
• Leitura do ficheiro chamado scene.scn
• Identificação de possíveis erros, com escrita no écran de mensagens explicativas
• Contabilização do número de objectos correctamente criados
• Contabilização discriminada (translação, rotação sobre centro geométrico, rotação
sobre ponto, ampliação/redução) do número de operações correctamente
declaradas no ficheiros
• Contabilização do numero de destruições declaradas
• Contabilização do número total de fotogramas a gerar.
Este programa servirá de base para o desenvolvimento do projecto final.
A entrega será realizada de modo electrónico, sendo dado conhecimento nas semanas
posteriores da nota e dos problemas encontrados.
Esta entrega intermédia será cotada entre 0 e 3 valores, sendo avaliado o seguinte:
• Funcionalidade implementada e a funcionar
• Estruturação do código
• Comentários
8.2. Entrega Final
Aquando da entrega final do projecto, os alunos deverão ter um programa que
implemente todas as funcionalidades pedidas.
Os alunos deverão entregar em versão electrónica (CD) a directoria do projecto
KDevelop, uma cópia em papel das listagens do código e uma impressão da
documentação gerada pelo Doxygen.
O trabalho final e a discussão desse trabalho será cotada entre 0 e 17 valores.

Documentos relacionados