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)));