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