libjbt

field.h

This is the verbatim text of the field.h include file.

#ifndef jbt_field_h
#define jbt_field_h

#include <jgl/jgl.h>


class jbt_field
{
public:
    virtual ~jbt_field(){};

    virtual jFlt f( jFlt, jFlt ) const = 0;

    static jbt_field* Default;

    virtual jFlt bound() const { return 1; }

    virtual bool square() const { return false; }


    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const = 0;

protected:
    jbt_field() : refcnt(0) {};

private:
    
    friend class jbt_primitive;
    friend class jbt_build;
    int refcnt;
};

class jbt_geoff_field : public jbt_field
{
public:
    jFlt f( jFlt, jFlt ) const;

    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;

    bool square() const { return true; }

    static const jFlt A;
    static const jFlt B;
    static const jFlt C;

    static jbt_geoff_field F;
};        

class jbt_bicubic_field : public jbt_field
{
public:
    jbt_bicubic_field( jFlt _b = 0.50 ) 
            : bound(_b)
        {}
    jFlt f( jFlt r, jFlt R ) const;
    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;

private:
    jFlt bound;
};

class jbt_arctan_field : public jbt_field
{
public:
    jbt_arctan_field( jFlt _s = 50 ) 
            : stiffness(_s)
        {}
    jFlt f( jFlt r, jFlt R ) const;
    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;

private:
    jFlt stiffness;
};


class jbt_blinn_field : public jbt_field
{
public:
    jbt_blinn_field( jFlt _a = -2 ) 
            : a(_a)
        {}


    jFlt f( jFlt r, jFlt ) const;


    jFlt bound() const { return 10; }
    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;

private:
    jFlt a;
};


class jbt_blanc_field : public jbt_field
{
public:


    jbt_blanc_field( jFlt _h = 0 ) : h(_h) {}
    
    jFlt f( jFlt r, jFlt R ) const;
    virtual jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;

private:
    jFlt h;
};


class jbt_inversepower_field : public jbt_field
{
public:
    
    jbt_inversepower_field( float _n = 2 ) 
            : n(_n)
        {};
    
    jFlt f( jFlt, jFlt ) const;
    jgl_algebraic* expression( jgl_algebraic*, jFlt ) const;
private:
    float n;
};


#endif

JSP / libjbt v0.1 mtigges@cpsc.ucalgary.ca