Field3D
|
#include <ProceduralField.h>
Public Types | |
typedef ProceduralField< Data_T > | class_type |
typedef ProceduralFieldLookup < Data_T > | CubicInterp |
typedef ProceduralFieldLookup < Data_T > | LinearInterp |
typedef boost::intrusive_ptr < ProceduralField > | Ptr |
Public Member Functions | |
virtual std::string | className () const |
Returns the class name of the object. Used by the class pool and when writing the data to disk. | |
virtual Data_T | lsSample (const V3d &lsP) const =0 |
template<> | |
V3h | typedFloatMetadata (const std::string &name, const V3h &defaultVal) const |
template<> | |
V3f | typedFloatMetadata (const std::string &name, const V3f &defaultVal) const |
template<> | |
double | typedFloatMetadata (const std::string &name, const double &defaultVal) const |
template<> | |
V3d | typedFloatMetadata (const std::string &name, const V3d &defaultVal) const |
Data_T | typedFloatMetadata (const std::string &name, const Data_T &defaultVal) const |
Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d) | |
template<> | |
half | typedFloatMetadata (const std::string &name, const half &defaultVal) const |
template<> | |
float | typedFloatMetadata (const std::string &name, const float &defaultVal) const |
template<> | |
half | typedIntMetadata (const std::string &name, const half &defaultVal) const |
Data_T | typedIntMetadata (const std::string &name, const Data_T &defaultVal) const |
Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d) | |
template<> | |
float | typedIntMetadata (const std::string &name, const float &defaultVal) const |
template<> | |
V3d | typedIntMetadata (const std::string &name, const V3d &defaultVal) const |
template<> | |
double | typedIntMetadata (const std::string &name, const double &defaultVal) const |
template<> | |
V3h | typedIntMetadata (const std::string &name, const V3h &defaultVal) const |
template<> | |
V3f | typedIntMetadata (const std::string &name, const V3f &defaultVal) const |
virtual Data_T | value (int i, int j, int k) const =0 |
Transforms the point from voxel space to subclass's space and calls the appropriate sample function. | |
virtual | ~ProceduralField () |
Destructor. | |
Static Public Member Functions | |
static const char * | classType () |
static DEFINE_FIELD_RTTI_ABSTRACT_CLASS const char * | staticClassName () |
Private Types | |
typedef Field< Data_T > | base |
Convenience typedef for referring to base class. | |
Static Private Attributes | |
static TemplatedFieldType < ProceduralField< Data_T > > | ms_classType |
This class generalizes the Field concept to fields that don't necessarily contain voxel data. This is technically wrong (it's not true that a perlin noise volume IS-A Field) but it lends great flexibility to the Field concept.
So what happens when a ProceduralField is accessed using the Field interface? ProceduralField itself implements value() such that it automatically point-samples the field instead of accessing a particular voxel. This makes the ProceduralField seem as a regular Field to anyone using that interface.
The interesting part comes when we look at interpolation. Regular Field objects use Interpolator objects to produce values in-between voxels. For ProceduralField, we instead want to point-sample in space, but other than that the resultant value can be handled the same.
It is also fine to interpolate the ProceduralField outside its bounds - just as it is with regular Fields. The difference is that ProceduralFields still return valid values outside its bounds.
By using ProceduralField, we can support purely procedural and hybrid procedural/discrete volumes, but to the functions that use them, they all function the same.
Definition at line 120 of file ProceduralField.h.
typedef boost::intrusive_ptr<ProceduralField> ProceduralField< Data_T >::Ptr |
Reimplemented from Field< Data_T >.
Definition at line 127 of file ProceduralField.h.
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::LinearInterp |
Definition at line 129 of file ProceduralField.h.
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::CubicInterp |
Definition at line 130 of file ProceduralField.h.
typedef ProceduralField<Data_T> ProceduralField< Data_T >::class_type |
Reimplemented from Field< Data_T >.
Definition at line 134 of file ProceduralField.h.
typedef Field<Data_T> ProceduralField< Data_T >::base [private] |
Convenience typedef for referring to base class.
Reimplemented from Field< Data_T >.
Definition at line 189 of file ProceduralField.h.
virtual ProceduralField< Data_T >::~ProceduralField | ( | ) | [inline, virtual] |
static DEFINE_FIELD_RTTI_ABSTRACT_CLASS const char* ProceduralField< Data_T >::staticClassName | ( | ) | [inline, static] |
Reimplemented from Field< Data_T >.
Definition at line 137 of file ProceduralField.h.
Referenced by ProceduralField< Data_T >::className().
{ return "ProceduralField"; }
static const char* ProceduralField< Data_T >::classType | ( | ) | [inline, static] |
Reimplemented from Field< Data_T >.
Definition at line 142 of file ProceduralField.h.
References FieldBase::name.
{ return ProceduralField<Data_T>::ms_classType.name(); }
virtual Data_T ProceduralField< Data_T >::lsSample | ( | const V3d & | lsP | ) | const [pure virtual] |
Referenced by ProceduralFieldLookup< Data_T >::sample().
virtual std::string ProceduralField< Data_T >::className | ( | ) | const [inline, virtual] |
Returns the class name of the object. Used by the class pool and when writing the data to disk.
Implements FieldBase.
Definition at line 159 of file ProceduralField.h.
References ProceduralField< Data_T >::staticClassName().
{ return staticClassName(); }
virtual Data_T ProceduralField< Data_T >::value | ( | int | i, |
int | j, | ||
int | k | ||
) | const [pure virtual] |
Transforms the point from voxel space to subclass's space and calls the appropriate sample function.
Implements Field< Data_T >.
Data_T ProceduralField< Data_T >::typedIntMetadata | ( | const std::string & | name, |
const Data_T & | defaultVal | ||
) | const |
Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d)
Data_T ProceduralField< Data_T >::typedFloatMetadata | ( | const std::string & | name, |
const Data_T & | defaultVal | ||
) | const |
Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d)
half ProceduralField< half >::typedIntMetadata | ( | const std::string & | name, |
const half & | defaultVal | ||
) | const [inline] |
Definition at line 216 of file ProceduralField.h.
{ return metadata().intMetadata(name, static_cast<int>(defaultVal)); }
float ProceduralField< float >::typedIntMetadata | ( | const std::string & | name, |
const float & | defaultVal | ||
) | const [inline] |
Definition at line 226 of file ProceduralField.h.
{ return metadata().intMetadata(name, static_cast<int>(defaultVal)); }
double ProceduralField< double >::typedIntMetadata | ( | const std::string & | name, |
const double & | defaultVal | ||
) | const [inline] |
Definition at line 236 of file ProceduralField.h.
{ return metadata().intMetadata(name, static_cast<int>(defaultVal)); }
V3h ProceduralField< V3h >::typedIntMetadata | ( | const std::string & | name, |
const V3h & | defaultVal | ||
) | const [inline] |
Definition at line 246 of file ProceduralField.h.
V3f ProceduralField< V3f >::typedIntMetadata | ( | const std::string & | name, |
const V3f & | defaultVal | ||
) | const [inline] |
Definition at line 256 of file ProceduralField.h.
V3d ProceduralField< V3d >::typedIntMetadata | ( | const std::string & | name, |
const V3d & | defaultVal | ||
) | const [inline] |
Definition at line 266 of file ProceduralField.h.
half ProceduralField< half >::typedFloatMetadata | ( | const std::string & | name, |
const half & | defaultVal | ||
) | const [inline] |
Definition at line 276 of file ProceduralField.h.
{ return metadata().floatMetadata(name, static_cast<float>(defaultVal)); }
float ProceduralField< float >::typedFloatMetadata | ( | const std::string & | name, |
const float & | defaultVal | ||
) | const [inline] |
Definition at line 286 of file ProceduralField.h.
{ return metadata().floatMetadata(name, defaultVal); }
double ProceduralField< double >::typedFloatMetadata | ( | const std::string & | name, |
const double & | defaultVal | ||
) | const [inline] |
Definition at line 296 of file ProceduralField.h.
{ return metadata().floatMetadata(name, static_cast<float>(defaultVal)); }
V3h ProceduralField< V3h >::typedFloatMetadata | ( | const std::string & | name, |
const V3h & | defaultVal | ||
) | const [inline] |
Definition at line 306 of file ProceduralField.h.
V3f ProceduralField< V3f >::typedFloatMetadata | ( | const std::string & | name, |
const V3f & | defaultVal | ||
) | const [inline] |
Definition at line 316 of file ProceduralField.h.
V3d ProceduralField< V3d >::typedFloatMetadata | ( | const std::string & | name, |
const V3d & | defaultVal | ||
) | const [inline] |
Definition at line 326 of file ProceduralField.h.
TemplatedFieldType<ProceduralField<Data_T> > ProceduralField< Data_T >::ms_classType [static, private] |
Reimplemented from Field< Data_T >.
Definition at line 185 of file ProceduralField.h.