Subversion Repositories gelsvn

Rev

Rev 346 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 346 Rev 349
Line 6... Line 6...
6
 
6
 
7
extern scene* current;
7
extern scene* current;
8
 
8
 
9
omni::omni(const CGLA::Vec3f& phi)
9
omni::omni(const CGLA::Vec3f& phi)
10
{
10
{
11
	set_power(phi);
11
    set_power(phi);
12
}
12
}
13
 
13
 
14
void omni::set_power(const CGLA::Vec3f& phi)
14
void omni::set_power(const CGLA::Vec3f& phi)
15
{
15
{
16
	power_ = phi;
16
    power_ = phi;
17
}
17
}
18
 
18
 
19
bool omni::sample(const ray& r,
19
bool omni::sample(const ray& r,
20
				  const hit_info& hi, 
20
                  const hit_info& hi, 
21
				  Vec3f& Li,
21
                  Vec3f& Li,
22
				  Vec3f& w) const
22
                  Vec3f& w) const
23
{
23
{
24
	Vec3f light_point(trs_[0][3], trs_[1][3], trs_[2][3]);
24
    Vec3f light_point(trs_[0][3], trs_[1][3], trs_[2][3]);
25
	
-
 
26
	w = normalize(light_point - hi.position);
-
 
27
	float r2 = sqr_length(light_point - hi.position);
-
 
28
 
-
 
29
	//send shadow feeler
-
 
30
	ray s;
-
 
31
	s.origin = hi.position + epsilon * w;
-
 
32
	s.direction = w;
-
 
33
	s.distance = std::sqrt(r2) - 2.f * epsilon;
-
 
34
	s.depth = r.depth + 1;
-
 
35
 
25
 
36
	if (current->intersect(s))
26
    w = normalize(light_point - hi.position);
37
		return false;
27
    float r2 = sqr_length(light_point - hi.position);
38
 
28
 
39
	//compute radiance
29
    //send shadow feeler
-
 
30
    ray s;
40
	Li = power_ / (4.f * float(M_PI) * r2);
31
    s.origin = hi.position + epsilon * w;
-
 
32
    s.direction = w;
-
 
33
    s.distance = std::sqrt(r2) - 2.f * epsilon;
-
 
34
    s.depth = r.depth + 1;
41
 
35
 
-
 
36
    if (current->intersect(s))
-
 
37
        return false;
-
 
38
 
-
 
39
    //compute radiance
-
 
40
    Li = power_ / (4.f * float(M_PI) * r2);
-
 
41
 
42
	return true;
42
    return true;
43
}
43
}
44
 
44
 
45
//02566 framework, Anders Wang Kristensen, awk@imm.dtu.dk, 2007
45
//02566 framework, Anders Wang Kristensen, awk@imm.dtu.dk, 2007