51#include <boost/foreach.hpp>
72 const float factor = 1.0 / (1 << level);
73 const V3f floatRes(baseRes);
74 return V3i(
static_cast<int>(
std::ceil(floatRes.x * factor)) + add.x,
75 static_cast<int>(
std::ceil(floatRes.y * factor)) + add.y,
76 static_cast<int>(
std::ceil(floatRes.z * factor)) + add.z);
93 const float mult = 1 << level;
94 const V3i res = extents.size() +
V3i(1);
97 const V3i offset((mipOff.x >> level) << level,
98 (mipOff.y >> level) << level,
99 (mipOff.z >> level) << level);
103 const V3d diff = offset - mipOff;
106 field_dynamic_cast<MatrixFieldMapping>(mapping)) {
108 const V3d lsOrigin(0.0), lsX(1.0, 0.0, 0.0), lsY(0.0, 1.0, 0.0),
111 const V3f wsBaseVoxelSize = mfm->wsVoxelSize(0, 0, 0);
113 const V3f wsVoxelSize = wsBaseVoxelSize * mult;
115 const MatrixCurve::SampleVec lsToWsSamples = mfm->localToWorldSamples();
119 BOOST_FOREACH (
const MatrixCurve::Sample &sample, lsToWsSamples){
121 V3d wsOrigin, wsX, wsY, wsZ;
122 mfm->localToWorld(lsOrigin, wsOrigin, sample.first);
123 mfm->localToWorld(lsX, wsX, sample.first);
124 mfm->localToWorld(lsY, wsY, sample.first);
125 mfm->localToWorld(lsZ, wsZ, sample.first);
127 wsX = (wsX - wsOrigin).normalized();
128 wsY = (wsY - wsOrigin).normalized();
129 wsZ = (wsZ - wsOrigin).normalized();
131 wsOrigin += wsX * wsBaseVoxelSize.x * diff.x;
132 wsOrigin += wsY * wsBaseVoxelSize.y * diff.y;
133 wsOrigin += wsZ * wsBaseVoxelSize.z * diff.z;
135 wsX *= wsVoxelSize.x * res.x;
136 wsY *= wsVoxelSize.y * res.y;
137 wsZ *= wsVoxelSize.z * res.z;
141 newMapping->setLocalToWorld(sample.first, mtx);
159 V3d wsOrigin(0.0), vsOrigin;
161 f.
mapping()->worldToVoxel(wsOrigin, vsOrigin);
164 -
static_cast<int>(
std::floor(vsOrigin.y + 0.5)),
165 -
static_cast<int>(
std::floor(vsOrigin.z + 0.5)));
Contains utility functions for constructing coordinate systems.
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.
V3i computeOffset(const FieldRes &f)
Computes the origin/offset of a field.
Contains MIP-related utility functions.
FieldMetadata & metadata()
accessor to the m_metadata class
boost::intrusive_ptr< FieldMapping > Ptr
FieldMapping::Ptr mapping()
Returns a pointer to the mapping.
Represents the mapping of a field by a matrix transform.
boost::intrusive_ptr< MatrixFieldMapping > Ptr
Convenience typedef.
FIELD3D_VEC3_T< T > ceil(const FIELD3D_VEC3_T< T > &v)
Ceil function for Vec3.
const std::string k_mipOffsetStr
FIELD3D_API V3i mipResolution(const V3i &baseRes, const size_t level, const V3i &add)
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.
FIELD3D_API FieldMapping::Ptr adjustedMIPFieldMapping(const FieldRes *base, const V3i &baseRes, const Box3i &extents, const size_t level)
#define FIELD3D_NAMESPACE_SOURCE_CLOSE