libjbt

primitive.h

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

#ifndef jbt_primitive_h
#define jbt_primitive_h

#include "object.h"

class jbt_field;
class jbt_distance;


class jbt_primitive : public jbt_object
{
    friend class jbt_query;    
public:
    
    ~jbt_primitive();


    void setField( jbt_field* );


    jbt_field* getField() const { return fld; }


    void setDistance( jbt_distance* );
    

    jbt_distance* getDistance() const { return dist; }


    void setR( jFlt _R ) { R = _R, R2 = R*R; computeBound(); }


    jFlt getR() const { return R; }


    void setCoefficient( jFlt _C ) { C = _C; }


    jFlt getCoefficient() const { return C; }

    void beginQuery( const jVec3& );

protected:    


    jbt_primitive( jFlt );


    virtual void precompute() 
        {};

    void field( jFlt& );
    void normal( jNorm3& );


    void uv( jVec2&, jbt_blobtree*, const jMat4& );
    

    virtual jVec2 uvl( const jVec3& ) { return jVec2(0,0); }
    

    virtual jVec3 displacement() = 0;


    int intersectSphere( jFlt, const jRay&, jFlt& a, jFlt& b ) const;
    

    int intersectCylinder( jFlt, const jRay&, jFlt& a, jFlt& b ) const;

    void attribute( jbt_attribute* ) {}
    void attributes( jbt_diffuse*, jbt_specular*, 
                     jbt_scalar*, jbt_scalar*, jbt_scalar* ) {}
    bool spanCSG( const jVec3&, const jVec3& ) { return false; }

    void bracket( const jRay&, jbt_brackets& );


    void computeBound();


    jgl_algebraic* expression( const jMat4& ) const;


    jFlt R;


    jBasis disB;

    jbt_field* fld;

    jbt_distance* dist;

    jFlt R2;

    jFlt C,d;
    jVec3 D,dD;
private:

    jVec3 remap( const jVec3& );

};

#endif

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