Instituto Superior de Engenharia de Lisboa Área Departamental de Engenharia de Electrónica e Telecomunicações e de Computadores Licenciatura em Engenharia Informática e de Computadores Computação Gráfica ! Segundo trabalho, Semestre de Inverno de 2013/2014 Neste trabalho os alunos desenvolverão competências relativas aos modelos de iluminação local (Phong) e global usando o algoritmo de ray tracing. Desenvolva uma aplicação 2D, CGRayTracing, em Java, para geração de imagens através do algoritmo de ray tracing. As imagens geradas representam uma cena composta por elementos geométricos elementares, tais como esferas, planos e caixas vistos a partir de um local. A figura Figura 1 mostra exemplos de imagens geradas com este algoritmo. ! ! ! Figura 1: Exemplo de imagens geradas com algoritmo de ray tracing Na realização deste trabalho pretende-se que os alunos completem, ou rescrevam, uma aplicação base, fornecida em anexo, de forma a ser capaz de gerar imagens com o algoritmo de iluminação global de ray tracing. Na aplicação fornecida, uma cena é descrita através dos tipos apresentados no diagrama UML estático de classes da figura Figura 2. Durante a realização do trabalho é expectável que este modelo de dados possa ser alterado. ! Figura 2: Diagrama UML estático de classes de uma cena ! CG/1314i – Carlos Guedes ! /!2 1 Computação Gráfica Segundo trabalho Em anexo é ainda disponibilizado um conjunto de ficheiros com cenas, codificados em JSON (http:// www.json.org). A aplicação base inclui ainda a implementação JSON para Java disponível em http:// www.json.org/java/, que gera uma representação em memória do conteúdo do documento JSON. O tipo JsonSceneLoader usa essa representação para criar um objecto do tipo Scene com a informação presente no ficheiro. A aplicação base fornecida implementa as seguintes funcionalidades: ! • Leitura da cena a partir de um ficheiro de texto (resource) em formato JSON • Geração dos raios primários, relativos ao plano de projecção Pretende-se que implemente (a ordem é meramente indicativa): • Intersecção raio/esfera e raio/plano • Uso do modelo de iluminação local de Phong para cálculo de cor na intersecção raio/esfera • Componente ambiente • Componente difusa • Componente especular • Zonas de sombra • Suporte para várias fontes de luz (apenas luzes pontuais) • Reflexão especular e controlo de recursividade • Uso de caixas (alinhadas com os eixos) • Leitura do ficheiro (05-cornell wire box.json) e intersecção raio/caixa ! Ligações úteis no desenvolvimento do trabalho: Sobre o algoritmo de RayTrace • http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtrace0.htm • http://www.siggraph.org/education/materials/HyperGraph/raytrace/rt_java/ raytrace.html Intersecção entre raio e formas geométricas • http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-7-intersectingsimple-shapes/ • ! ! http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter3.htm A avaliação do trabalho tem em conta todos os aspectos do software desenvolvido, nomeadamente: cumprimento de requisitos, estruturação, qualidade e documentação do código produzido. A entrega deste trabalho consiste na entrega de um ZIP com o código desenvolvido e por um documento (sem capa, índice, resumo, etc..) com considerações sobre o trabalho desenvolvido. Este documento deve ter o máximo de duas folhas. O documento deve incluir um cabeçalho, tal como este enunciado, com identificação do grupo e respectivos membros. Bom trabalho CG/1314i – Carlos Guedes ! /!2 2