Computação Visual — 2015/2016
Propostas para o 1º Trabalho — WebGL
*** Data limite para a entrega: 7 de Dezembro de 2015 ***
Cada grupo de dois alunos deverá seleccionar um trabalho de entre as várias
propostas seguintes e comunicar a sua escolha ao docente da sua turma prática.
É encorajada, em alternativa, a apresentação de propostas de trabalho
autónomas.
Além do código, é pedida a cada grupo de alunos a entrega de um relatório
sucinto (PDF – usando o formato da Revista do DETI), descrevendo os aspetos
principais quer da aplicação desenvolvida quer do trabalho efectuado.
Será também necessário fazer, posteriormente, uma apresentação do trabalho e
uma demonstração da aplicação desenvolvida. Os dois trabalhos da unidade curricular
(WebGL e OpenCV) serão apresentados numa sessão única, em data a combinar em
Janeiro.
O trabalho entregue deverá ser original. Além dos ficheiros distribuídos nas
aulas práticas, poderão ser utilizados (pontualmente) algum código ou
bibliotecas existentes, desde que esse facto seja claramente referenciado no
código e no relatório.
Trabalhos que utilizem grande volume de código não original, sem o
referenciar explicitamente, serão anulados.
Propostas de trabalhos:
1. Fractais 3D: gerar e visualizar diferentes (e simples) fractais 3D
representados como malhas de triângulos. Deve ser possível seleccionar o
tipo de fractal e especificar o nível de subdivisão.
2. Visualização de Superfícies: visualizar superfícies (p.ex., quádricas)
representadas como malhas de triângulos. Deve ser possível estabelecer a
equação / os parâmetros que definem cada tipo de superfície usando menus
e o teclado. Ou então visualizar superfícies cuja representação é lida a partir
de ficheiro — parte do trabalho consiste em construir vários ficheiros
representando diferentes tipos de superfícies.
3. Visualização em tempo real de uma nuvem de pontos 3D adquirida com
uma Microsoft Kinect. Para além do acesso aos dados, usando uma
biblioteca para o efeito (Microsoft SDK, openni) e eventualmente um
servidor, devem ser disponibilizadas algumas funcionalidades adicionais.
Por exemplo, seleção de dois pontos (para medição de distâncias),
1
manipulação do ponto de observação através de rato e teclado, ou até
funcionalidades mais avançadas, como visualização da textura adquirida
pela Kinect, seleção de três pontos para definir planos de interesse e
remover os pontos considerados próximos do plano, etc.
4. Edição interativa de modelos 3D: ler um modelo 3D (nuvem de pontos ou
malha de triângulos) num formato pré-estabelecido, alterar / remover
pontos ou triângulos e guardar o resultado em ficheiro. Devem ser
implementadas operações adicionais (p.ex., triangulação de uma nuvem de
pontos) e permitida a seleção/edição de múltiplos pontos ou triângulos.
5. Jogos 3D: desenvolver um jogo 3D, tal como: Snooker, Scorch3D
(adaptação do famoso jogo de tanques 2D para uma versão 3D), Pinball 3D
sobre um plano, Point and Shoot 3D (que poderá ser adaptado para usar um
sensor 3D), etc.
6. Morphing entre modelos simples 3D: visualização dos sucessivos passos
do processo de morphing entre modelos simples (tetraedro, cubo, esfera,
etc.). O utilizador deverá poder seleccionar os pontos de controlo e os
parâmetros de morphing a aplicar.
7. Demonstração do funcionamento do Mapeamento de Texturas em
WebGL, sendo possível utilizar texturas de diferentes tipos, bem como
alterar parâmetros do mapeamento. Um possível cenário consiste na
apresentação de um mesmo modelo em dois viewports distintos, mas sendo
mapeadas texturas distintas, de modo a permitir a comparação visual dos
resultados obtidos.
8. Shaders: ilustração, com base em modelos simples, dos efeitos que é
possível obter com os shaders. Deve ser possível ler diferentes modelos 3D
e especificar os tipos de efeitos que se pretende visualizar.
9. Animação de um braço robótico: animar o movimento de um braço
robótico com 6 graus de liberdade (DOF – degree-of-freedom): 3 DOFs
para posicionar o braço do robot (2 no ombro e 1 no cotovelo) e 3 DOFs
para orientar a garra. Deve ser possível especificar a posição angular das
várias juntas.
10. Simulação do funcionamento de uma linha de montagem simples, p.ex.,
em que alguns robots manipulam peças e montam um qualquer produto
final. Deverá ser usado um conjunto reduzido de primitivas básicas cuja
instanciação, com posição, orientação, factor de escala e cores particulares,
permitirá a definição dos vários modelos mais complexos. Será dada
particular importância à animação do funcionamento da linha de
montagem, que deverá poder ser observada a partir de diferentes locais.
11. Apresentação dos tipos de projeção mais habituais, usando diferentes
modelos lidos a partir de ficheiro; o utilizador pode selecionar o tipo de
projeção e aplicar diferentes transformações ao modelo, observando assim
2
o efeito da combinação de sucessivas transformações. Deverá ser possível
selecionar diretamente alguns dos casos mais comuns (p.ex., isometrias).
12. Representação do volume de visualização (view volume), modificação das
suas características (p.ex., posição do observador) e visualização da
resultante imagem final. Deve ser criada uma cena fixa, em 3D, com
objetos simples. E mostrar ao utilizador duas janelas: uma com a vista 2D
resultante do volume de visualização definido e, outra, apresentando o
volume de visualização na cena 3D. Alterações quer da posição do
observador, quer das características de visualização (p.ex., tipo de
projeção), devem refletir-se nas duas janelas.
13. Percurso do Cavalo (“Knight’s Tour”): dado um tabuleiro de xadrez (8 ×
8) e uma posição inicial em que se encontra um cavalo, pode determinar-se
um percurso em que o cavalo visita cada uma das outras casas uma só vez,
e cada movimento do cavalo entre duas casas respeita as regras do xadrez.
Deverá ser apresentado um tabuleiro 3D, permitida a escolha da casa
inicial, e reproduzidos (3D) os movimentos do cavalo ao efectuar o seu
percurso. A determinação do percurso do cavalo pode ser feita usando um
algoritmo apropriado (p.ex., um algoritmo de procura com backtracking).
14. Animação em 3D do funcionamento de algoritmos de ordenação:
ilustrar e comparar o funcionamento de algoritmos de ordenação, com
distintas ordens de complexidade. Por exemplo, os elementos do array a
ordenar são representados por barras cuja altura é proporcional ao valor dos
elementos a ordenar. É importante permitir a visualização, em simultâneo,
do funcionamento de dois algoritmos de ordenação, para se perceber qual é
o mais rápido, por exemplo.
15. Representação de gráficos / diagramas em 3D: a partir de tabelas de
dados representadas em ficheiro, construir diferentes tipos de gráficos /
diagramas: gráficos de barras, gráficos de setores (pie charts), etc. Uma
componente importante do trabalho é a procura e utilização de tipos de
gráficos / representações menos habituais.
16. Modelação de um pequeno bairro, com algumas ruas, casas, candeeiros e
árvores de diferentes tipos. Deverá ser usado um conjunto de primitivas de
base (p.ex., cubo, prisma triangular, prisma hexagonal e pirâmide
hexagonal), cuja instanciação, com posição, orientação, factor de escala e
cores particulares, permitirá a definição dos vários modelos mais
complexos. O utilizador poderá “passear” no bairro de diferentes modos
(p.ex., usando diferentes tipos de projecção e/ou fontes de luz). Sugestão:
definir o bairro usando um ficheiro de texto com um formato apropriado.
17. Puzzle 3D: as peças do puzzle são um conjunto de poliedros de diferentes
tipos que se podem agrupar de modo a formar um prisma; o utilizador pode
seleccionar uma peça de cada vez, orientá-la e (tentar) colocá-la na sua
posição final.
3
18. Pêndulos 3D: modelação de uma cena constituída por pêndulos com
diferentes características (pelo menos 3 pêndulos), que podem oscilar
simultaneamente. Cada um dos pêndulos deverá ser modelado em 3D.
Deverá ser possível, no mínimo, iniciar e parar as oscilações de modo
independente.
19. Lego: simulação / animação da construção de modelos usando peças Lego,
com diferentes formas e cores. O utilizador deve poder seleccionar a peça
que quer usar, orientá-la e posicioná-la, de modo a ir construindo um dado
modelo. Deverá ser possível apresentar quer diferentes vistas (prédefinidas) do modelo que está a ser construído, quer posicionar o
observador em diferentes pontos da cena 3D. Uma possibilidade
interessante seria ler de ficheiro um guião que define o modo como um
modelo é construído e apresentar uma animação da sua construção.
20. Animação simples que exemplifique de uma forma dinâmica o
funcionamento do algoritmo de Ray-Tracing. Deve ser criada uma cena
simples, com pelo menos duas esferas, um plano (chão) e duas fontes de luz
configuráveis e de cores diferentes, e mostrado o plano da imagem e a
posição do observador (um cone). O utilizador activa a animação sendo
mostrados os percursos dos raios primários e secundários.
J. Madeira / P. Dias
28/OUT/2015
4
Download

aqui