28 curve_coef[0] = p1[dim];
29 curve_coef[1] = 0.5f * (-p0[dim] + p2[dim]);
30 curve_coef[2] = 0.5f * (2 * p0[dim] - 5 * p1[dim] + 4 * p2[dim] - p3[dim]);
31 curve_coef[3] = 0.5f * (-p0[dim] + 3 * p1[dim] - 3 * p2[dim] + p3[dim]);
33 float discroot = curve_coef[2] * curve_coef[2] - 3 * curve_coef[3] * curve_coef[1];
38 discroot =
sqrtf(discroot);
39 ta = (-curve_coef[2] - discroot) / (3 * curve_coef[3]);
40 tb = (-curve_coef[2] + discroot) / (3 * curve_coef[3]);
41 ta = (ta > 1.0f || ta < 0.0f) ? -1.0f : ta;
42 tb = (tb > 1.0f || tb < 0.0f) ? -1.0f : tb;
45 *upper =
max(p1[dim], p2[dim]);
46 *lower =
min(p1[dim], p2[dim]);
54 exa = curve_coef[3] * t3 + curve_coef[2] * t2 + curve_coef[1] * ta + curve_coef[0];
59 exb = curve_coef[3] * t3 + curve_coef[2] * t2 + curve_coef[1] * tb + curve_coef[0];
62 *upper =
max(*upper,
max(exa, exb));
63 *lower =
min(*lower,
min(exa, exb));
#define CCL_NAMESPACE_END
CCL_NAMESPACE_BEGIN void curvebounds(float *lower, float *upper, float3 *p, int dim)