Эффект стекла - художественный эффект - PullRequest
5 голосов
/ 11 января 2010

Я хочу придать эффект изображениям, где результирующее изображение будет выглядеть так, как будто мы смотрим на него сквозь текстурированное стекло (не гладкое / гладкое) ... Пожалуйста, помогите мне в написании алгоритма для создания такого эффекта .

Вот пример типа эффекта, который я ищу

Первое изображение - это исходное изображение, а второе - выходной файл, который я ищу.

Ответы [ 2 ]

4 голосов
/ 11 января 2010

Начните с создания шумовой карты с размерами (width + 1) x (height + 1), которая будет использоваться для смещения исходного изображения. Я предлагаю использовать какой-то шум перлина , чтобы смещение не было случайным. Вот хорошая ссылка о том, как генерировать перлин-шум.

Как только у нас появится шум, мы можем сделать что-то вроде этого:

Image noisemap; //size is (width + 1) x (height + 1) gray scale values in [0 255] range
Image source; //source image
Image destination; //destination image
float displacementRadius = 10.0f; //Displacemnet amount in pixels
for (int y = 0; y < source.height(); ++y) {
    for (int x = 0; x < source.width(); ++x) {
        const float n0 = float(noise.getValue(x, y)) / 255.0f;
        const float n1 = float(noise.getValue(x + 1, y)) / 255.0f;
        const float n2 = float(noise.getValue(x, y + 1)) / 255.0f;
        const int dx = int(floorf((n1 - n0) * displacementRadius + 0.5f));
        const int dy = int(floorf((n2 - n0) * displacementRadius + 0.5f));
        const int sx = std::min(std::max(x + dx, 0), source.width() - 1); //Clamp
        const int sy = std::min(std::max(y + dy, 0), source.height() - 1); //Clamp
        const Pixel& value = source.getValue(sx, sy);
        destination.setValue(x, y, value);
    }
}
1 голос
/ 11 января 2010

Я не могу предложить вам конкретный пример, но на форумах и статьях gamedev есть много золота для обработки изображений, 3D-рендеринга и тому подобного. Например, здесь статья , в которой говорится об использовании матриц свертки для применения аналогичных эффектов к изображениям, которые могут быть хорошей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...