RSL tem algumas funcoes prontas que calculam a contribuicao da luz
no shader . adicionando iluminacao ambient, diffuse e specular
essas funcoes sao :
ambient()
diffuse()
specular()
algumas dessas funcoes precisam receber informacoes sobre a geometria para o calculo
,a funcao ambient() é a mais simples em geral usada sem argumentos adicionais, mas
ja a diffuse() precisa de uma normal com comprimento maximo de 1 apontada para a direcao contraria
do Observador . confuso ne ! . eu tbm acho ! mas seguindo a relacao de funcoes e variaveis globais vc
vai descobrir que N = normal de um objeto, I = vetor do observador, e que a funcao normalize(), converte
o comprimento de um vetor em um valor entre 0 e 1 e finalmente a funcao faceforward() inverte a direcao
da normal para aprontar na direcao contraria do observador no Ponto de vista do shader .
entao no final fica assim
faceforward(normalize(N),I) ;
essa pequena funcao vai retornar um a normal do ponto a ser calculado com comprimento de no maximo 1 apontada para o observador
vamos guardar isso em uma variavel do tipo normals .
normal Nf = faceforward(normalize(N),I) ;
bem agora que achamos a informacao que precisamos . é so adicionar isso como um argumento
na funcao diffuse() .
diffuse(Nf)
aplicando tudo isso em um shader :
surface
meushader( color verde = (0.0 , 1.0 , 0.0 ) ; )
{
normal Nf = faceforward(normalize(N),I);
Oi = Os ;
Ci = Os * verde *(ambient()+ diffuse(Nf));
}
copile e teste !!
t+
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment