iWaveOcean
3ds Max ocean simulation plugin
GaussianConvolution.h
1 #pragma once
2 #include "IConvolution.h"
3 #include "Convolution.h"
4 
6  public IConvolution<2>
7 {
8  float _kernel[5][5];
9  IConvolution<2>* _convolution;
10 
11  static void GetGaussianKernel(float sigma, float(& arr)[5][5])
12  {
13  float double_sigma_2 = 2.0 * sigma * sigma;
14  float sum = 0.0f;
15 
16  for (int i = -2; i <= 2; i++)
17  {
18  int i_2 = i * i;
19  for (int j = -2; j <= 2; j++)
20  {
21  int j_2 = j * j;
22  float val = exp(-(i_2 + j_2) / double_sigma_2);
23  arr[i + 2][j + 2] = val;
24  sum += val;
25  }
26  }
27 
28  for (int i = 0; i < 5; i++)
29  {
30  for (int j = 0; j < 5; j++)
31  {
32  arr[i][j] /= sum;
33  }
34  }
35  }
36 
37 public:
38  GaussianConvolution(float sigma) {
39  GetGaussianKernel(sigma, _kernel);
40  _convolution = new Convolution<2, ExtendEdges>(_kernel);
41  }
42 
43  void Convolve(float* in, float* out, int rows, int cols) const {
44  _convolution->Convolve(in, out, rows, cols);
45  }
46 
47  ~GaussianConvolution(void) {
48  delete _convolution;
49  }
50 };
51 
Definition: IConvolution.h:5
Definition: Convolution.h:22
virtual void Convolve(float *in, float *out, int rows, int cols) const =0
void Convolve(float *in, float *out, int rows, int cols) const
Definition: GaussianConvolution.h:43
Definition: GaussianConvolution.h:5