MCPcopy Create free account
hub / github.com/RenderKit/embree / boundSegmentLinear

Function boundSegmentLinear

kernels/common/scene_instance.cpp:206–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

204 */
205
206 BBox3fa boundSegmentLinear(AffineSpace3fa const& xfm0,
207 AffineSpace3fa const& xfm1,
208 BBox3fa const& obbox0,
209 BBox3fa const& obbox1,
210 BBox3fa const& bbox0,
211 BBox3fa const& bbox1,
212 float tmin,
213 float tmax)
214 {
215 BBox3fa delta(Vec3fa(0.f), Vec3fa(0.f));
216
217 // loop over bounding box corners
218 for (int ii = 0; ii < 2; ++ii)
219 for (int jj = 0; jj < 2; ++jj)
220 for (int kk = 0; kk < 2; ++kk)
221 {
222 Vec3fa p0(ii == 0 ? obbox0.lower.x : obbox0.upper.x,
223 jj == 0 ? obbox0.lower.y : obbox0.upper.y,
224 kk == 0 ? obbox0.lower.z : obbox0.upper.z);
225 Vec3fa p1(ii == 0 ? obbox1.lower.x : obbox1.upper.x,
226 jj == 0 ? obbox1.lower.y : obbox1.upper.y,
227 kk == 0 ? obbox1.lower.z : obbox1.upper.z);
228
229 // get extrema of motion of bounding box corner for each dimension
230 const Vec3fa denom = 2.0 * xfmVector(xfm0 - xfm1, p0 - p1);
231 const Vec3fa nom = 2.0 * xfmPoint (xfm0, p0) - xfmPoint(xfm0, p1) - xfmPoint(xfm1, p0);
232 for (int dim = 0; dim < 3; ++dim)
233 {
234 if (!(std::abs(denom[dim]) > 0)) continue;
235
236 const float tl = (nom[dim] + (bbox1.lower[dim] - bbox0.lower[dim])) / denom[dim];
237 if (tmin <= tl && tl <= tmax) {
238 const BBox3fa bt = lerp(bbox0, bbox1, tl);
239 const Vec3fa pt = xfmPoint (lerp(xfm0, xfm1, tl), lerp(p0, p1, tl));
240 delta.lower[dim] = std::min(delta.lower[dim], pt[dim] - bt.lower[dim]);
241 }
242 const float tu = (nom[dim] + (bbox1.upper[dim] - bbox0.upper[dim])) / denom[dim];
243 if (tmin <= tu && tu <= tmax) {
244 const BBox3fa bt = lerp(bbox0, bbox1, tu);
245 const Vec3fa pt = xfmPoint(lerp(xfm0, xfm1, tu), lerp(p0, p1, tu));
246 delta.upper[dim] = std::max(delta.upper[dim], pt[dim] - bt.upper[dim]);
247 }
248 }
249 }
250 return delta;
251 }
252
253 /*
254 This function calculates the correction for the linear bounds

Callers 1

boundSegmentMethod · 0.70

Calls 7

Vec3faClass · 0.50
xfmVectorFunction · 0.50
xfmPointFunction · 0.50
absFunction · 0.50
lerpFunction · 0.50
minFunction · 0.50
maxFunction · 0.50

Tested by

no test coverage detected