+array<Metaball, CLOUD_DIM_X * CLOUD_DIM_Y * CLOUD_DIM_Z> metaballs;
+
+const float cloudScale = metaballR;
+const float metaballScale = metaballR * 3.f;
+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++) {
+ 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];
+ /* m.d = 0; */
+ metaballs[i * CLOUD_DIM_Y * CLOUD_DIM_Z + j * CLOUD_DIM_Z + k] = m;
+ }
+ }
+ }
+ /* for (int z = 0; z < CLOUD_DIM_Z; z++) */
+ /* metaballs[32 * CLOUD_DIM_Y * CLOUD_DIM_Z + 32 * CLOUD_DIM_Z + z].d = 1; */
+}
+
+vec3 sunPos = {0, 10, 0}, sunDir = {0, -1, 0};
+size_t sunColorIdx = 0;
+std::array<vec4, 2> sunColors = {
+ vec4(1,1,1,1),
+ vec4(0.988,0.309,0.677,1)
+};
+vec3 camPos = {0, 0, -5}, viewPos = {0, 0, 0};