librtl

material.h

This is the verbatim text of the material.h include file.
#ifndef material_h
#define material_h

#include <jgl/colour.h>
#include <jgl/image.h>
#include <jgl/linearalgebra.h>

#include "flags.h"
#include "texture.h"
#include "collect_alloc.h"

class rtl_object;
class jImage;
class rtl_ray;


class rtl_material : public dyn_collectable
{
public:


    rtl_material();


    rtl_material( const jColour& );


    rtl_material( jFlt, jFlt, const jColour&, jFlt, const jColour&, jFlt,
                  jFlt=0.1, jFlt=0.0 );


    void texture( rtl_texture* _tex ) { tex = _tex;  }


    const rtl_texture* texture() const { return tex; }
    

    rtl_texture* texture() { return tex; }
    

    jFlt kA() const { return ka; }


    jFlt kD() const { return kd; }


    jFlt kS() const { return ks; }


    jFlt n() const { return se; }


    const jColour& kR() const { return kr; }


    const jColour& kT() const { return kt; }


    void kA( jFlt _ka ) { ka = _ka; }
    


    void kD( jFlt _kd ) { kd = _kd; }


    void kS( jFlt _ks ) { ks = _ks; }


    void kR( jFlt _kr ) { kr.togray(_kr); }


    void kT( jFlt _kt ) { kt.togray(_kt); }


    void kR( const jColour& _kr ) { kr = _kr; }


    void kT( const jColour& _kt ) { kt = _kt; }


    void n( jFlt _se ) { se = _se; }
    

    jFlt ior() const { return i_r; }


    void ior( jFlt _ior ) { i_r = _ior; }


    const jColour& diffuse() const { return dclr; }


    const jColour& specular() const { return sclr; }


    void diffuse( const jColour& _dclr ) { dclr = _dclr; }


    void specular( const jColour& _sclr ) { sclr = _sclr; }


    virtual void surface( rtl_ray& ray, const jVec3& pt, jNorm3& N )
        {
            if(tex)tex->texture(this,ray,pt,N);
        }


    virtual jColour spawn( rtl_ray&, const jVec3&, const jNorm3& );


    enum Type
    {
        Whitted,
        Hall
    };


    virtual Type type() const { return Whitted; }


    static rtl_material Default;


    void assume( const rtl_material*, bool texture = true );


    void lerp( jFlt, const rtl_material*, const rtl_material* );


    void trilerp( jFlt, const rtl_material*,
		  jFlt, const rtl_material*,
		  jFlt, const rtl_material* );


    const rtl_flags& flags() const { return f; }


    rtl_flags& flags() { return f; }    

protected:

    jFlt ka,kd,ks,se,i_r;
    jColour dclr, sclr, kr, kt;

    void setdefault();

    rtl_texture* tex;
    
    rtl_flags f;
};


class rtl_glass : public rtl_material
{
public:
    rtl_glass();
    rtl_glass( const jColour& );
    

    void frost( jFlt );
};


#endif

JSP / librtl v0.2 mtigges@cpsc.ucalgary.ca