From 4a893c4573d0373489d93ad0cd64eb29761d5e29 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 7 Oct 2010 14:16:15 +0200 Subject: [PATCH] implement a missing C89 case --- misc/tools/fft-normalmap-to-heightmap.c | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/misc/tools/fft-normalmap-to-heightmap.c b/misc/tools/fft-normalmap-to-heightmap.c index 7b72fcbd..2143407a 100644 --- a/misc/tools/fft-normalmap-to-heightmap.c +++ b/misc/tools/fft-normalmap-to-heightmap.c @@ -122,7 +122,31 @@ void nmap_to_hmap(unsigned char *map, const unsigned char *refmap, int w, int h, else freqspace1[(w*y+x)] = 0; #else - // not yet implemented + fftw_complex response_x = {0, 0}; + fftw_complex response_y = {0, 0}; + double sum; + for(i = -filterh / 2; i <= filterh / 2; ++i) + for(j = -filterw / 2; j <= filterw / 2; ++j) + { + response_x[0] += filter[(i + filterh / 2) * filterw + j + filterw / 2] * cos(TWO_PI * (j * fx + i * fy)); + response_x[1] += filter[(i + filterh / 2) * filterw + j + filterw / 2] * sin(TWO_PI * (j * fx + i * fy)); + response_y[0] += filter[(i + filterh / 2) * filterw + j + filterw / 2] * cos(TWO_PI * (i * fx + j * fy)); + response_y[1] += filter[(i + filterh / 2) * filterw + j + filterw / 2] * sin(TWO_PI * (i * fx + j * fy)); + } + + sum = response_x[0] * response_x[0] + response_x[1] + response_x[1] + + response_y[0] * response_y[0] + response_y[1] + response_y[1]; + + if(sum > 0) + { + freqspace1[(w*y+x)][0] = (response_x[0] * freqspace1[(w*y+x)][0] + response_x[1] * freqspace1[(w*y+x)][1] + response_y[0] * freqspace2[(w*y+x)][0] + response_y[1] * freqspace2[(w*y+x)][1]) / sum; + freqspace1[(w*y+x)][1] = (response_x[0] * freqspace1[(w*y+x)][1] - response_x[1] * freqspace1[(w*y+x)][0] + response_y[0] * freqspace2[(w*y+x)][1] - response_y[1] * freqspace2[(w*y+x)][0]) / sum; + } + else + { + freqspace1[(w*y+x)][0] = 0; + freqspace1[(w*y+x)][1] = 0; + } #endif } else -- 2.39.2