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