implement heightmap grid

This commit is contained in:
2018-08-07 19:45:38 +02:00
parent 16c04c433f
commit f941fc4254
11 changed files with 257 additions and 65 deletions

View File

@@ -46,3 +46,36 @@ void Image::flip()
}
std::swap(m_data, flipped);
}
ui::Image ui::Image::resize(int w, int h)
{
Image ret;
ret.create(w, h);
auto temp = (glm::u8vec4*)ret.data();
auto pixels = (glm::u8vec4*)data();
float x_ratio = ((float)(width - 1)) / w;
float y_ratio = ((float)(height - 1)) / h;
float x_diff, y_diff, ya, yb;
int offset = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int x = (int)(x_ratio * j);
int y = (int)(y_ratio * i);
x_diff = (x_ratio * j) - x;
y_diff = (y_ratio * i) - y;
int index = y * width + x;
// range is 0 to 255 thus bitwise AND with 0xff
glm::vec4 A = pixels[index];
glm::vec4 B = pixels[index + 1];
glm::vec4 C = pixels[index + width];
glm::vec4 D = pixels[index + width + 1];
// Y = A(1-w)(1-h) + B(w)(1-h) + C(h)(1-w) + Dwh
glm::vec4 gray = A*(1 - x_diff)*(1 - y_diff) + B * (x_diff)*(1 - y_diff) +
C * (y_diff)*(1 - x_diff) + D * (x_diff*y_diff);
temp[offset++] = glm::clamp(gray, glm::vec4(0), glm::vec4(255));
}
}
return ret;
}