Clouds WIP
[opengl.git] / clouds.cpp
1 #include "clouds.hpp"
2 #include <cmath>
3 #include <GL/glew.h>
4
5 float w(int i, int j, int k) { return 1; }
6
7 const float metaballR = 1;
8 float metaballField(float r) {
9         if (r > metaballR) return 0;
10         const float a = r / metaballR;
11         return (-4.f/9.f * powf(a, 6)) + (17.f/9.f * powf(a, 4)) - (22.f/9.f * powf(a, 2)) + 1;
12 }
13
14 const float normalizationFactor = 748.f / 405.f * M_PI * metaballR;
15
16 void calcContDist(Clouds *clds, float t) {
17         const int i0 = 2, j0 = 2, k0 = 2, t0 = 2;
18         const float divisor = 1.f / 
19                                         ((2 * t0 + 1) *
20                                          (2 * k0 + 1) *
21                                          (2 * j0 + 1) *
22                                          (2 * i0 + 1));
23         float sum = 0;
24         for (int i = 0; i < CLOUD_DIM; i++) {
25                 for (int j = 0; j < CLOUD_DIM; j++) {
26                         for (int k = 0; k < CLOUD_DIM; k++) {
27
28
29                                 // inner sums
30                                 /* for (int tp = -t0, tp < t0; tp++) { */
31                                         for (int ip = -i0; ip < i0; ip++) {
32                                                 for (int jp = -j0; jp < j0; jp++) {
33                                                         for (int kp = -k0; kp < k0; kp++) {
34
35
36                                                                 sum += w(ip, jp, kp) * (float)clds->cld[i + ip][j + jp][k + kp];
37
38                                                         }
39                                                 }
40                                         }
41                                 /* } */
42
43                                 clds->contDist[i][j][k] = sum / divisor;
44
45                         }
46                 }
47         }
48 }
49
50 void renderBillboard() {
51         
52 }