Global Illumination을 위해 사용되는 방법에는 Ray casting이 있다. 다음은 Ray Casting의 Trace함수이다. 이 코드에는 그림자를 만드는 부분이 빠져있다. 이때 그림자를 만들기 위해 추가하여야 할 코드를 명시하시오. Intersect함수는 light_source, no_intersection, intersection중 하나의 값만 반환한다.
color trace(point p, vector d)
{
point p;
normal n;
//Camera to Object
q = intersect(p,d,status);
if(status == light_source) return(light_source_color); //Emission
if(status == no_intersection) return(background_color); //Background Ambient
n = normalize(q);
//Light to Object
l = intersect (light_source_position, q - light_source_position, status);//shadow map
if(status == intersection) return(0,0,0);//shadow
l = direction(q,light_source_position);
direct = lighting_model(d,q,l,n);
return direct;
}
GLSL
복사
color trace(point p, vector d)
{
point p;
normal n;
//Camera to Object
q = intersect(p,d,status);
if(status == light_source) return(light_source_color); //Emission
if(status == no_intersection) return(background_color); //Background Ambient
n = normalize(q);
for(i=0; i<num_light_source; i++){
//Light to Object
l = intersect (light_source_position, q - light_source_position, status);//shadow map
if(status == intersection) direct += shadow_color;
else{
l = direction(q,light_source_position);
direct += lighting_model(d,q,l,n);
}
}
return direct;
}
GLSL
복사