|
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.