| @@ -25,6 +25,18 @@ LOLFX_RESOURCE_DECLARE(12_voronoi_distance); | |||
| LOLFX_RESOURCE_DECLARE(12_distance); | |||
| LOLFX_RESOURCE_DECLARE(12_texture_to_screen); | |||
| enum | |||
| { | |||
| KEY_ESC, | |||
| KEY_PUSH, | |||
| KEY_POP, | |||
| KEY_F1, | |||
| KEY_F2, | |||
| KEY_F3, | |||
| KEY_MAX | |||
| }; | |||
| enum FboType | |||
| { | |||
| SrcVoronoiFbo, | |||
| @@ -51,6 +63,13 @@ public: | |||
| m_time = .0f; | |||
| m_timer = -1.0f; | |||
| mode = 0; | |||
| m_controller = new Controller("Default", KEY_MAX, 0); | |||
| m_controller->GetKey(KEY_ESC).Bind("Keyboard", "Escape"); | |||
| m_controller->GetKey(KEY_PUSH).Bind("Keyboard", "p"); | |||
| m_controller->GetKey(KEY_POP).Bind("Keyboard", "o"); | |||
| m_controller->GetKey(KEY_F1).Bind("Keyboard", "F1"); | |||
| m_controller->GetKey(KEY_F2).Bind("Keyboard", "F2"); | |||
| m_controller->GetKey(KEY_F3).Bind("Keyboard", "F3"); | |||
| } | |||
| virtual void TickGame(float seconds) | |||
| @@ -59,17 +78,17 @@ public: | |||
| { | |||
| //Shutdown logic | |||
| if (Input::WasReleased(Key::Escape)) | |||
| if (m_controller->GetKey(KEY_ESC).IsReleased()) | |||
| Ticker::Shutdown(); | |||
| } | |||
| m_time += seconds; | |||
| m_hotspot = 0.4f * vec3(lol::sin(m_time * 4.f) + lol::cos(m_time * 5.3f), | |||
| lol::sin(m_time * 5.7f) + lol::cos(m_time * 4.4f), | |||
| lol::sin(m_time * 5.f)); | |||
| m_color = 0.25f * vec3(1.1f + lol::sin(m_time * 2.5f + 1.f), | |||
| 1.1f + lol::sin(m_time * 2.8f + 1.3f), | |||
| 1.1f + lol::sin(m_time * 2.7f)); | |||
| m_hotspot = 0.4f * vec3((float)lol::sin(m_time * 4.0) + (float)lol::cos(m_time * 5.3), | |||
| (float)lol::sin(m_time * 5.7) + (float)lol::cos(m_time * 4.4), | |||
| (float)lol::sin(m_time * 5.0)); | |||
| m_color = 0.25f * vec3(1.1f + (float)lol::sin(m_time * 2.5 + 1.0), | |||
| 1.1f + (float)lol::sin(m_time * 2.8 + 1.3), | |||
| 1.1f + (float)lol::sin(m_time * 2.7)); | |||
| /* Saturate dot color */ | |||
| float x = std::max(m_color.x, std::max(m_color.y, m_color.z)); | |||
| m_color /= x; | |||
| @@ -150,16 +169,16 @@ public: | |||
| { | |||
| //Shutdown logic | |||
| if (Input::WasReleased(Key::O)) | |||
| if (m_controller->GetKey(KEY_POP).IsReleased()) | |||
| voronoi_points.Pop(); | |||
| else if (Input::WasReleased(Key::P)) | |||
| else if (m_controller->GetKey(KEY_PUSH).IsReleased()) | |||
| voronoi_points.Push(vec3(rand<float>(512.f), rand<float>(512.f), .0f), | |||
| vec2(64.f + rand<float>(64.f), 64.f + rand<float>(64.f))); | |||
| else if (Input::WasReleased(Key::F1)) | |||
| else if (m_controller->GetKey(KEY_F1).IsReleased()) | |||
| m_cur_fbo = SrcVoronoiFbo; | |||
| else if (Input::WasReleased(Key::F2)) | |||
| else if (m_controller->GetKey(KEY_F2).IsReleased()) | |||
| m_cur_fbo = VoronoiFbo; | |||
| else if (Input::WasReleased(Key::F3)) | |||
| else if (m_controller->GetKey(KEY_F3).IsReleased()) | |||
| { | |||
| voronoi_points.Empty(); | |||
| if (mode == 0) | |||
| @@ -185,10 +204,13 @@ public: | |||
| int maxi = 6; | |||
| for (int i = 0; i < maxi; ++i) | |||
| { | |||
| voronoi_points.Push(vec3(256.f) + 196.f * vec3(lol::cos(m_time + i * 2.f * F_PI / maxi), lol::sin(m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 128.f * vec3(lol::cos(-m_time + i * 2.f * F_PI / maxi), lol::sin(-m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 64.f * vec3(lol::cos(m_time + i * 2.f * F_PI / maxi), lol::sin(m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 32.f * vec3(lol::cos(-m_time + i * 2.f * F_PI / maxi), lol::sin(-m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||
| float mi = (float)maxi; | |||
| float j = (float)i; | |||
| float f_time = (float)m_time; | |||
| voronoi_points.Push(vec3(256.f) + 196.f * vec3(lol::cos( f_time + j * 2.0 * F_PI / mi), lol::sin( f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 128.f * vec3(lol::cos(-f_time + j * 2.0 * F_PI / mi), lol::sin(-f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 64.f * vec3(lol::cos( f_time + j * 2.0 * F_PI / mi), lol::sin( f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||
| voronoi_points.Push(vec3(256.f) + 32.f * vec3(lol::cos(-f_time + j * 2.0 * F_PI / mi), lol::sin(-f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||
| } | |||
| voronoi_points.Push(vec3(256.f), vec2(.0f)); | |||
| } | |||
| @@ -371,6 +393,7 @@ public: | |||
| } | |||
| private: | |||
| Controller* m_controller; | |||
| Array<vec3, vec2> voronoi_points; | |||
| Array<vec2> m_vertices; | |||
| Shader *m_screen_shader; | |||