Para a avaliación desta parte da materia tedes estas dúas prácticas, con distintas opcións/nota en función do tempo que lle queirades/poidades adicar.
Lembrade que non haberá preguntas no(s) exame(s) final(is). As prácticas serán recuperables para a segunda oportunidade, de ser preciso.
-> Grupos de 1 a 3 estudantes -> Para a evaluación das prácticas é posible que se requira unha defensa interactiva da mesma con todas as persoas do grupo de prácticas
A partir do esqueleto de código do arquivo
spinningcube_withlight_SKEL.cpp
que podedes atopar neste repositorio
(rama practicaOpenGL) tedes que implementar unha iluminación
simple con Phong sobre un cubo 3D en movemento. A implementación ten
que funcionar para cámara, punto(s) de luz e cubo 3D en posicións
arbitrarias.
Cunha soa fonte de luz (luz punto) e co cubo cun único material homoxéneo (comportamento idéntico fronte á luz en todos os puntos da superficie do cubo), trátase de aplicar Phong shading básico.
Ver ata diapositiva 11 (de 28) en igm_render_teoria3.pdf
Engadide un segundo modelo 3D á escena (conservando o cubo): unha pirámide triangular (tetraedro), e un segundo punto de luz. No tiro de cámara téñense que apreciar as dúas luces.
Engadide un mapa difuso nas caras do(s) cubo(s) para o cálculo de Phong, o que permite ter distintas propiedades de reflexión difusa por fragmento.
Diapositiva 12 (de 28) en igm_render_teoria3.pdf
Engadide tamén un mapa especular, que permita distintos comportamentos da compoñente especular da luz en función do punto iluminado do cubo. O mapa especular ten que ser distinto do mapa difuso empregado.
Diapositiva 13 (de 28) en igm_render_teoria3.pdf
Ver tamén mapeado de texturas a partir de diapositiva 30 en
igm_render_lab2.pdf
Engadide unha segunda cámara, permitindo cun atallo de teclado conmutar o render entre as dúas cámaras.
-> URL a repositorio git co código, no que se vexa o progreso nas versións do traballo.
No repositorio ten que haber:
- Os arquivos co código fonte e un makefile que constrúa o(s) binario(s)
- Capturas de pantalla nas que se vexan renders da práctica e, ademais, a versión de OpenGL na saída estándar.
Para a evaluación da práctica é posible que se requira unha defensa interactiva da mesma con todas as persoas do grupo de prácticas.
Empregaremos como base este simple proxecto de ray tracer: https://gist.github.com/rossant/6046463
-> é python2 ¯\_ (ツ)_/¯ -> Precisaredes numpy e matplotlib
Engadirlla a este motor a posibilidade de traballar cun número arbitrario de fontes de luz, cada unha delas coas súas propias características (posición, cor).
Modificade a escena predeterminada a renderizar para que inclúa novas luces con distintas cores, mostrando a nova feature incorporada.
Engadir ao motor unha nova primitiva gráfica coa que traballar: triángulo.
O código orixinal deste raytracer unicamente emprega esferas ou planos para construír unha escena e iluminala. Tedes que engadir a posibilidade de ter tamén triángulos na escena.
Modifica a escena predeterminada para que inclúa algún triángulo, ademais de esferas e planos como a escena orixinal.
->Consello: Podedes reutilizar a función para calcular a intersección raio-plano que xa está no código, e a maiores precisades outra función que, unha vez sabemos que o raio choca co plano, comprobe se este punto de intesección está dentro do triángulo co que estamos a comprobar a intersección raio-triángulo.
Cambia o tiro de cámara para obter un render cenital (visto dende arriba, non ten por que ser perfectamente cenital).
-> URL a repositorio git co código, no que se vexa o progreso nas versións do traballo.
-> Etiquetade (git tag
) as distintas versións que correspondan a
cada unha das partes.
No repositorio ten que haber tamén exemplos de renders obtidos coas características incorporadas.
Tamén podedes achegar algún texto aclarativo/explicativo se o considerades preciso.