Subversion Repositories gelsvn

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "omni.hpp"

using namespace CGLA;

#include "scene.hpp"

extern scene* current;

omni::omni(const CGLA::Vec3f& phi)
{
        set_power(phi);
}

void omni::set_power(const CGLA::Vec3f& phi)
{
        power_ = phi;
}

bool omni::sample(const ray& r,
                                  const hit_info& hi, 
                                  Vec3f& Li,
                                  Vec3f& w) const
{
        Vec3f light_point(trs_[0][3], trs_[1][3], trs_[2][3]);
        
        w = normalize(light_point - hi.position);
        float r2 = sqr_length(light_point - hi.position);

        //send shadow feeler
        ray s;
        s.origin = hi.position + epsilon * w;
        s.direction = w;
        s.distance = std::sqrt(r2) - 2.f * epsilon;
        s.depth = r.depth + 1;

        if (current->intersect(s))
                return false;

        //compute radiance
        Li = power_ / (4.f * float(M_PI) * r2);

        return true;
}

//02566 framework, Anders Wang Kristensen, awk@imm.dtu.dk, 2007

Generated by GNU Enscript 1.6.6.