+array<Metaball, CLOUD_DIM_X * CLOUD_DIM_Y * CLOUD_DIM_Z> metaballs;
+
+const float cloudScale = metaballR;
+const float metaballScale = metaballR * 1.5f;
+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, 5, 0}, sunDir = {0, -1, 0};
+size_t envColorIdx = 0;
+// First color is sun color, second is sky color
+std::array<std::array<vec4, 2>, 3> envColors{
+ {{vec4(1, 1, 1, 1), vec4(0.9, 1, 1, 1)},
+ {vec4(0.939, 0.632, 0.815, 1), vec4(0.9, 1, 1, 1)},
+ {vec4(0.999, 0.999, 0.519, 1), vec4(0.981, 0.667, 0.118, 1)}}};
+vec3 camPos = {0, 0, -3}, viewPos = {0, 0, 0};