2010-01-11 18 views
5

Chciałbym nadać efekt zdjęciom, w których wynikowy obraz wyglądałby tak, jakbyśmy patrzyli na niego przez teksturowane szkło (nie gładkie/gładkie) ... Proszę, pomóżcie mi w napisaniu algo wygenerować taki efekt.Efekt szklany - Efekt artystyczny

Oto an example typu efektu szukam

Pierwszy obraz jest oryginalny obraz i drugi obraz jest im wyjście szukasz.

Odpowiedz

4

Rozpocznij od utworzenia mapy hałasu o wymiarach (width + 1) x (height + 1), która zostanie użyta do zastąpienia oryginalnego obrazu. Proponuję użyć jakiegoś rodzaju perlin noise, aby przesunięcie nie było przypadkowe. Oto dobry link na temat generowania szumu perlinowego.

Gdy mamy hałas możemy zrobić coś takiego:

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

Thanks Andreas. Właśnie tego szukałem. Dzięki jeszcze raz – megha

1

Nie mogę podać konkretnego przykładu, ale sekcje z artykułami gamedev mają dużo złota na przetwarzanie obrazów, renderowanie w 3D i tym podobne. Na przykład, tutaj jest an article mówi o używaniu macierzy splotu do zastosowania podobnych efektów do obrazów, które mogą być dobrym punktem wyjścia.