2010-01-11 7 views
5

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

Вот an example типа эффекта я ищу

Первое изображение исходное изображение и второе изображение выход им ищет.

ответ

4

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

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

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); 
    } 
} 
+0

Спасибо Andreas. Это именно то, что я искал. Еще раз спасибо – megha

1

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