#ifndef rdo_sampling_H #define rdo_sampling_H /* Funções para escolher sítios de rdo_sampling. */ #define rdo_sampling_H_COPYRIGHT "Copyright © 2008 Danillo Pereira e J. Stolfi, UNICAMP" /* Last edited on 2008-07-22 15:39:18 by stolfi */ #define _GNU_SOURCE #include #include #include #include "rdo_geometry.h" #include "rdo_solid.h" #include "rdo_finish.h" #include "rdo_sparse_matrix.h" #include "rdo_radiosity.h" #include "rdo_camera.h" #include "rdo_site.h" #include "rdo_scene.h" ListaDeSitios GeraCentrosDaBaseAprox ( ListaDeObjetos *obs, TipoDeDistancia tpDist, OpcoesDeAmostragem *opAmo, Camera *cam ); /* Escolhe os centróides dos elementos da base de aproximação, para a cena {cena} e camera {cam}, conforme as opções {opAmo}. */ ListaDeSitios GeraSitiosDosPixeis ( ListaDeObjetos *obs, Camera *cam, Filme *filme ); /* Gera os sítios na superficie da cena correspondentes aos pixéis da imagem a ser produzida. O vetor devolvido tem um sítio (que pode estar na esfera celeste) para cada pixel do filme. Os pixéis são armazenados linha por linha, e por coluna dentro da linha. */ void GeraSitiosPorProjecao ( ListaDeObjetos *obs, Camera *cam, int nh, int nv, ListaDeSitios *sts ); /* Acrescenta à lista de sítios {*sts} um conjunto de novos sítios, obtidos traçando {nh*nv} raios a partir do ponto {cam->olho}. os raios passam por pontos doplano de imagem da câmera. Os pontos são escolhidos em um retângulo com raio {cam->raio}, e razão largura:altura igual a {nh}:{nv}. Expande a lista {*sts} conforme necessário. */ void GeraSitiosSecundarios(ListaDeObjetos *obs, ListaDeSitios *sts, int num_raios); /* Acrescenta à lista de sítios {*sts} um conjunto de novos sítios, obtidos lançando {num_raios} raios aleatórios a partir de cada um dos sítios na lista. Considera apenas sítios que atigem algum objeto a distância finita. Expande a lista {*sts} conforme necessário. */ Sitio GeraSitioSecundario(ListaDeObjetos *obs, Sitio *sO); /* Gera um sítio supostamente relevante para a radiosidade no sítio {sO}. Para isso, gera um raio a partir de {*sO}, em uma direção aleatória (mas de preferência próxima da normal de {*sO}), e determina o sítio de intersecção desse raio com a cena. Caso o raio não encontre nenhum objeto, retorna um sitio com {.iob = -1}. Falha se o ponto {sO->posicao} está dentro de algum objeto da cena. */ #endif