47 const float x = std::clamp(
v.x, 0.0f, 1.0f) * (
gridPointsX - 1);
48 const float y = std::clamp(
v.y, 0.0f, 1.0f) * (
gridPointsY - 1);
49 const float z = std::clamp(
v.z, 0.0f, 1.0f) * (
gridPointsZ - 1);
50 const float w = std::clamp(
v.w, 0.0f, 1.0f) * (
gridPointsW - 1);
51 const uint32_t lox =
static_cast<uint32_t
>(std::floor(
x));
52 const uint32_t hix = std::min(lox + 1,
gridPointsX - 1);
53 const uint32_t loy =
static_cast<uint32_t
>(std::floor(
y));
54 const uint32_t hiy = std::min(loy + 1,
gridPointsY - 1);
55 const uint32_t loz =
static_cast<uint32_t
>(std::floor(
z));
56 const uint32_t hiz = std::min(loz + 1,
gridPointsZ - 1);
57 const uint32_t low =
static_cast<uint32_t
>(std::floor(
w));
58 const uint32_t hiw = std::min(low + 1,
gridPointsW - 1);
59 frac.x =
x -
static_cast<float>(lox);
60 frac.y =
y -
static_cast<float>(loy);
61 frac.z =
z -
static_cast<float>(loz);
62 frac.w =
w -
static_cast<float>(low);
72 tmp[0] = interpolate(
table[
index(lox, loy, loz, low)],
74 tmp[1] = interpolate(
table[
index(lox, loy, hiz, low)],
76 tmp[2] = interpolate(
table[
index(lox, hiy, loz, low)],
78 tmp[3] = interpolate(
table[
index(lox, hiy, hiz, low)],
80 tmp[4] = interpolate(
table[
index(hix, loy, loz, low)],
82 tmp[5] = interpolate(
table[
index(hix, loy, hiz, low)],
84 tmp[6] = interpolate(
table[
index(hix, hiy, loz, low)],
86 tmp[7] = interpolate(
table[
index(hix, hiy, hiz, low)],
89 for (
int i = 0;
i < 4; ++
i)
90 interpolateIn(tmp[
i * 2], tmp[
i * 2 + 1], frac.
z);
92 for (
int i = 0;
i < 2; ++
i)
93 interpolateIn(tmp[
i * 4], tmp[
i * 4 + 2], frac.
y);
95 interpolateIn(tmp[0], tmp[4], frac.
x);
114 for (
int i = 0;
i < 4; ++
i)
115 interpolateIn(tmp[
i * 2], tmp[
i * 2 + 1], frac.
z);
117 for (
int i = 0;
i < 2; ++
i)
118 interpolateIn(tmp[
i * 4], tmp[
i * 4 + 2], frac.
y);
120 interpolateIn(tmp[0], tmp[4], frac.
x);