From d32d6bffa25633fc1060e30c88b7739ed93f87ed Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Fri, 20 Mar 2020 22:46:31 +0000 Subject: [PATCH] Clouds WIP --- clouds.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ clouds.hpp | 9 +++++++++ 2 files changed, 61 insertions(+) create mode 100644 clouds.cpp create mode 100644 clouds.hpp diff --git a/clouds.cpp b/clouds.cpp new file mode 100644 index 0000000..5fe2bb8 --- /dev/null +++ b/clouds.cpp @@ -0,0 +1,52 @@ +#include "clouds.hpp" +#include +#include + +float w(int i, int j, int k) { return 1; } + +const float metaballR = 1; +float metaballField(float r) { + if (r > metaballR) return 0; + const float a = r / metaballR; + return (-4.f/9.f * powf(a, 6)) + (17.f/9.f * powf(a, 4)) - (22.f/9.f * powf(a, 2)) + 1; +} + +const float normalizationFactor = 748.f / 405.f * M_PI * metaballR; + +void calcContDist(Clouds *clds, float t) { + const int i0 = 2, j0 = 2, k0 = 2, t0 = 2; + const float divisor = 1.f / + ((2 * t0 + 1) * + (2 * k0 + 1) * + (2 * j0 + 1) * + (2 * i0 + 1)); + float sum = 0; + for (int i = 0; i < CLOUD_DIM; i++) { + for (int j = 0; j < CLOUD_DIM; j++) { + for (int k = 0; k < CLOUD_DIM; k++) { + + + // inner sums + /* for (int tp = -t0, tp < t0; tp++) { */ + for (int ip = -i0; ip < i0; ip++) { + for (int jp = -j0; jp < j0; jp++) { + for (int kp = -k0; kp < k0; kp++) { + + + sum += w(ip, jp, kp) * (float)clds->cld[i + ip][j + jp][k + kp]; + + } + } + } + /* } */ + + clds->contDist[i][j][k] = sum / divisor; + + } + } + } +} + +void renderBillboard() { + +} diff --git a/clouds.hpp b/clouds.hpp new file mode 100644 index 0000000..1a8496d --- /dev/null +++ b/clouds.hpp @@ -0,0 +1,9 @@ +static const int CLOUD_DIM = 16; +struct Clouds { + char cld[CLOUD_DIM][CLOUD_DIM][CLOUD_DIM]; + float contDist[CLOUD_DIM][CLOUD_DIM][CLOUD_DIM]; +}; + + +// calculate continuous distribution +void calcContDist(Clouds *clds); -- 2.30.2