revert ChancellorIkseew/bicubic-interpolation
This commit is contained in:
parent
a2e8d13f22
commit
c433681842
@ -299,7 +299,6 @@ Changes the heightmap size.
|
||||
Available interpolation modes:
|
||||
- 'nearest' - no interpolation
|
||||
- 'linear' - bilinear interpolation
|
||||
- 'cubic' - bicubic interpolation
|
||||
|
||||
### heightmap:crop(...)
|
||||
|
||||
|
||||
@ -303,7 +303,6 @@ map:resize(ширина, высота, интерполяция)
|
||||
Доступные режимы интерполяции:
|
||||
- 'nearest' - без интерполяции
|
||||
- 'linear' - билинейная интерполяция
|
||||
- 'cubic' - бикубическая интерполяция
|
||||
|
||||
### heightmap:crop(...)
|
||||
|
||||
|
||||
@ -50,73 +50,7 @@ static inline float sample_at(
|
||||
|
||||
return a00 + a10*tx + a01*ty + a11*tx*ty;
|
||||
}
|
||||
case InterpolationType::CUBIC: {
|
||||
float b1 =
|
||||
((tx - 1) * (tx - 2) * (tx + 1) * (ty - 1) * (ty - 2) * (ty + 1)) / 4;
|
||||
float b2 =
|
||||
(tx * (tx + 1) * (tx - 2) * (ty - 1) * (ty - 2) * (ty + 1)) / -4;
|
||||
float b3 =
|
||||
(tx * (tx + 1) * (tx - 2) * (ty - 1) * (ty - 2) * (ty + 1)) / -4;
|
||||
float b4 =
|
||||
(tx * (tx + 1) * (tx + 2) * ty * (ty + 1) * (ty - 2)) / 4;
|
||||
float b5 =
|
||||
(tx * (tx - 1) * (tx - 2) * (ty - 1) * (ty - 2) * (ty + 1)) / -12;
|
||||
float b6 =
|
||||
((tx - 1) * (tx - 2) * (tx + 1) * ty * (ty - 1) * (ty - 2)) / -12;
|
||||
float b7 =
|
||||
(tx * (tx - 1) * (tx - 2) * ty * (ty + 1) * (ty - 2)) / 12;
|
||||
float b8 =
|
||||
(tx * (tx + 1) * (tx - 2) * ty * (ty - 1) * (ty - 2)) / 12;
|
||||
float b9 =
|
||||
(tx * (tx - 1) * (tx + 1) * (ty - 1) * (ty - 2) * (ty + 1)) / 12;
|
||||
float b10 =
|
||||
((tx - 1) * (tx - 2) * (tx + 1) * ty * (ty - 1) * (ty + 1)) /12;
|
||||
float b11 =
|
||||
(tx * (tx - 1) * (tx - 2) * ty * (ty + 1) * (ty - 2)) / 36;
|
||||
float b12 =
|
||||
(tx * (tx - 1) * (tx + 1) * ty * (ty + 1) * (ty - 2)) / -12;
|
||||
float b13 =
|
||||
(tx * (tx + 1) * (tx - 2) * ty * (ty - 1) * (ty + 1)) / -12;
|
||||
float b14 =
|
||||
(tx * (tx - 1) * (tx + 1) * ty * (ty - 1) * (ty - 2)) / -36;
|
||||
float b15 =
|
||||
(tx * (tx - 1) * (tx - 2) * ty * (ty - 1) * (ty + 1)) / -36;
|
||||
float b16 =
|
||||
(tx * (tx - 1) * (tx + 1) * ty * (ty - 1) * (ty + 1)) / 36;
|
||||
|
||||
|
||||
float a1 = b1 * val;
|
||||
float a2 = b2 * sample_at(buffer, width, ix, iy + 1 < height ? iy + 1 : iy);
|
||||
float a3 = b3 * sample_at(buffer, width, ix + 1 < width ? ix + 1 : ix, iy);
|
||||
float a4 = b4 * sample_at(buffer, width,
|
||||
ix + 1 < width ? ix + 1 : ix, iy + 1 < height ? iy + 1 : iy);
|
||||
float a5 = b5 * sample_at(buffer, width, ix, iy > 1 ? iy - 1 : iy);
|
||||
float a6 = b6 * sample_at(buffer, width, ix > 1 ? ix - 1 : ix, iy);
|
||||
float a7 = b7 * sample_at(buffer, width,
|
||||
ix + 1 < width ? ix + 1 : ix, iy > 1 ? iy - 1 : iy);
|
||||
float a8 = b8 * sample_at(buffer, width,
|
||||
ix > 1 ? ix - 1 : ix, iy + 1 < height ? iy + 1 : iy);
|
||||
float a9 = b9 * sample_at(buffer, width,
|
||||
ix, iy + 2 < height ? iy + 2 : iy);
|
||||
float a10 = b10 * sample_at(buffer, width,
|
||||
ix + 2 < width ? ix + 2 : ix, iy);
|
||||
float a11 = b11 * sample_at( buffer, width,
|
||||
ix > 1 ? ix - 1 : ix, iy > 1 ? iy - 1 : iy);
|
||||
float a12 = b12 * sample_at(buffer, width,
|
||||
ix + 1 < width ? ix + 1 : ix, iy + 2 < height ? iy + 2 : iy);
|
||||
float a13 = b13 * sample_at(buffer, width,
|
||||
ix + 2 < width ? ix + 2 : ix, iy + 1 < height ? iy + 1 : iy);
|
||||
float a14 = b14 * sample_at(buffer, width,
|
||||
ix > 1 ? ix - 1 : ix, iy + 2 < height ? iy + 2 : iy);
|
||||
float a15 = b15 * sample_at(buffer, width,
|
||||
ix + 2 < width ? ix + 2 : ix, iy > 1 ? iy - 1 : iy);
|
||||
float a16 = b16 * sample_at(buffer, width,
|
||||
ix + 2 < width ? ix + 2 : ix, iy + 2 < height ? iy + 2 : iy);
|
||||
|
||||
return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 +
|
||||
a9 + a10 + a11 + a12 + a13 + a14 + a15 + a16;
|
||||
}
|
||||
|
||||
// TODO: implement CUBIC (Bicubic) interpolation
|
||||
default:
|
||||
throw std::runtime_error("interpolation type is not implemented");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user