Subversion Repositories gelsvn

Rev

Rev 349 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
353 awk 1
#include "omni.h"
346 awk 2
 
3
using namespace CGLA;
4
 
353 awk 5
#include "scene.h"
346 awk 6
 
7
extern scene* current;
8
 
9
omni::omni(const CGLA::Vec3f& phi)
10
{
349 awk 11
    set_power(phi);
346 awk 12
}
13
 
14
void omni::set_power(const CGLA::Vec3f& phi)
15
{
349 awk 16
    power_ = phi;
346 awk 17
}
18
 
19
bool omni::sample(const ray& r,
349 awk 20
                  const hit_info& hi, 
21
                  Vec3f& Li,
22
                  Vec3f& w) const
346 awk 23
{
349 awk 24
    Vec3f light_point(trs_[0][3], trs_[1][3], trs_[2][3]);
346 awk 25
 
349 awk 26
    w = normalize(light_point - hi.position);
27
    float r2 = sqr_length(light_point - hi.position);
346 awk 28
 
349 awk 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;
346 awk 35
 
349 awk 36
    if (current->intersect(s))
37
        return false;
346 awk 38
 
349 awk 39
    //compute radiance
40
    Li = power_ / (4.f * float(M_PI) * r2);
41
 
42
    return true;
346 awk 43
}
44
 
45
//02566 framework, Anders Wang Kristensen, awk@imm.dtu.dk, 2007