+array<Metaball, CLOUD_DIM_X * CLOUD_DIM_Y * CLOUD_DIM_Z> metaballs;
+
+Clouds cs;
+
+void calculateMetaballs() {
+ stepClouds(&cs);
+ /* for (int i = 0; i < 256; i++) { */
+ /* float x = ((float)rand()/(float)(RAND_MAX) - 0.5) * 2; */
+ /* float y = ((float)rand()/(float)(RAND_MAX) - 0.5) * 2; */
+ /* float z = ((float)rand()/(float)(RAND_MAX) - 0.5) * 2; */
+ /* float r = (float)rand()/(float)(RAND_MAX) * 1; */
+ /* Metaball m = {{x,y,z}, r}; */
+ /* metaballs.push_back(m); */
+ /* } */
+ for (int i = 0; i < CLOUD_DIM_X; i++) {
+ for (int j = 0; j < CLOUD_DIM_Y; j++) {
+ for (int k = 0; k < CLOUD_DIM_Z; k++) {
+ const float cloudScale = 1.f / 16;
+ Metaball m = {
+ vec3(i, j, k) * vec3(cloudScale),
+ {i, j, k} };
+ /* m.pos = (m.pos * vec3(2)) - (cloudScale / 2); */
+ m.pos -= vec3(CLOUD_DIM_X, CLOUD_DIM_Y, CLOUD_DIM_Z) * cloudScale / 2.f;
+ m.d = cs.q[i][j][k];
+ metaballs[i * CLOUD_DIM_Y * CLOUD_DIM_Z + j * CLOUD_DIM_Z + k] = m;
+ }
+ }
+ }
+}
+
+vec3 sunPos = {0, 5, 5}, sunDir = {0, -1, -1};
+/* vec4 sunColor = {1,0,0.429,1}; */
+vec4 sunColor = {1,1,1,1};
+vec3 camPos = {0, 0, -5}, viewPos = {0, 0, 0};