2010-01-11 13 views
5

Deseo dar un efecto a las imágenes, donde la imagen resultante parecería como si la miráramos a través de un vidrio con textura (no liso/liso) ... Ayúdenme a escribir un algo para generar tal efecto.Efecto de vidrio - Efecto artístico

Aquí es an example del tipo de efecto que estoy buscando

La primera imagen es la imagen original y la segunda imagen es la salida im buscando.

Respuesta

4

Comience por crear un mapa de ruido con las dimensiones (width + 1) x (height + 1) que se utilizarán para desplazar la imagen original. Sugiero usar algún tipo de perlin noise para que el desplazamiento no sea aleatorio. Aquí hay un buen link sobre cómo generar ruido perlin.

Una vez que tenemos el ruido que podemos hacer algo como esto:

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

Gracias Andreas. Esto es exactamente lo que estaba buscando. Gracias de nuevo – megha

1

No puedo ofrecerle un ejemplo específico, pero las secciones de artículos gamedev foros & tienen mucho oro para procesamiento de imágenes, renderizado 3D y similares. Por ejemplo, aquí está an article hablando sobre el uso de matrices de convolución para aplicar efectos similares a las imágenes que podrían ser un buen punto de partida.