51 #include <boost/foreach.hpp> 68 const float factor = 1.0 / (1 << level);
69 const V3f floatRes(baseRes);
70 return V3i(static_cast<int>(
std::ceil(floatRes.x * factor)),
71 static_cast<int>(
std::ceil(floatRes.y * factor)),
72 static_cast<int>(
std::ceil(floatRes.z * factor)));
84 const float mult = 1 << level;
85 const V3i res = extents.size() +
V3i(1);
88 field_dynamic_cast<MatrixFieldMapping>(mapping)) {
90 const V3d lsOrigin(0.0), lsX(1.0, 0.0, 0.0), lsY(0.0, 1.0, 0.0),
93 const V3f wsBaseVoxelSize = mfm->wsVoxelSize(0, 0, 0);
95 const V3f wsVoxelSize = wsBaseVoxelSize * mult;
97 const MatrixCurve::SampleVec lsToWsSamples = mfm->localToWorldSamples();
101 BOOST_FOREACH (
const MatrixCurve::Sample &sample, lsToWsSamples){
103 V3d wsOrigin, wsX, wsY, wsZ;
104 mfm->localToWorld(lsOrigin, wsOrigin, sample.first);
105 mfm->localToWorld(lsX, wsX, sample.first);
106 mfm->localToWorld(lsY, wsY, sample.first);
107 mfm->localToWorld(lsZ, wsZ, sample.first);
109 wsX = (wsX - wsOrigin).normalized();
110 wsY = (wsY - wsOrigin).normalized();
111 wsZ = (wsZ - wsOrigin).normalized();
113 wsX *= wsVoxelSize.x * res.x;
114 wsY *= wsVoxelSize.y * res.y;
115 wsZ *= wsVoxelSize.z * res.z;
119 newMapping->setLocalToWorld(sample.first, mtx);
#define FIELD3D_NAMESPACE_SOURCE_CLOSE
FIELD3D_NAMESPACE_OPEN FIELD3D_MTX_T< T > coordinateSystem(const FIELD3D_VEC3_T< T > &e1, const FIELD3D_VEC3_T< T > &e2, const FIELD3D_VEC3_T< T > &e3, const FIELD3D_VEC3_T< T > &origin)
Constructs a coordinate systems given a set of basis vectors and an origin.
FIELD3D_API FieldMapping::Ptr adjustedMIPFieldMapping(const FieldMapping::Ptr baseMapping, const V3i &baseRes, const Box3i &extents, const size_t level)
boost::intrusive_ptr< FieldMapping > Ptr
Contains MIP-related utility functions.
FIELD3D_API V3i mipResolution(const V3i &baseRes, const size_t level)
FIELD3D_VEC3_T< T > ceil(const FIELD3D_VEC3_T< T > &v)
Ceil function for Vec3.
Contains utility functions for constructing coordinate systems.
Represents the mapping of a field by a matrix transform.
boost::intrusive_ptr< MatrixFieldMapping > Ptr
Convenience typedef.