#include "MyBuiltinCubeScene.h" #include #include #include MyBuiltinCubeScene::MyBuiltinCubeScene(Application& application) : Scene(application), m_shape(meshgenerator::gen_cube_p(DRAW_TRIANGLES, 2.0f, 2.0f, 2.0f), DrawMode::DRAW_TRIANGLES), m_camera((float)TAU_1_4, (float)m_screen_size.x / m_screen_size.y, 1.0f, 10.0f, vec3(0.0f, 0.0f, 5.0f)), m_batch(&m_shape, 2) { m_pipeline.add_batch(&m_batch); m_pipeline.set_camera(&m_camera); } void MyBuiltinCubeScene::init() { m_batch.init(); } void MyBuiltinCubeScene::update(float delta_time, clock_t clock) { float brightness; float radians; clock_t c; const clock_t intervals = 512 * CLOCKS_PER_SEC / 100; const clock_t half_interval = 256 * CLOCKS_PER_SEC / 100; c = clock % intervals; if (c < half_interval) brightness = (float)c / half_interval; else brightness = (float)(intervals - c) / half_interval; radians = (float)TAU * c / intervals; m_pose_a.rotate(glm::normalize(vec3(1.0f, 1.0f, 0.0f)), (float)TAU_1_2 * delta_time); m_pose_a.update_position(vec3(3 * (float)cos(radians), 1.0f, 0.0f)); m_pose_b.rotate(glm::normalize(vec3(1.0f, 1.0f, 0.0f)), (float)TAU_1_2 * delta_time); m_pose_b.update_position(vec3(-3 * (float)cos(radians), -1.0f, 0.0f)); vec3 camera_translation(0.0f, 0.0f, 0.0f); if (m_input_manager.is_key_down(GLFW_KEY_W)) camera_translation.y += 1; if (m_input_manager.is_key_down(GLFW_KEY_S)) camera_translation.y -= 1; if (m_input_manager.is_key_down(GLFW_KEY_A)) camera_translation.x -= 1; if (m_input_manager.is_key_down(GLFW_KEY_D)) camera_translation.x += 1; if (m_input_manager.is_key_down(GLFW_KEY_Q)) camera_translation.z -= 1; if (m_input_manager.is_key_down(GLFW_KEY_E)) camera_translation.z += 1; float camera_rotation = 0.0f; if (m_input_manager.is_key_down(GLFW_KEY_Z)) camera_rotation += 1; if (m_input_manager.is_key_down(GLFW_KEY_C)) camera_rotation -= 1; m_camera.translate(camera_translation * delta_time); m_camera.rotate(vec3(0.0f, 1.0f, 0.0f), camera_rotation * (float)TAU_1_8 * delta_time); m_batch.reset_rendered(); m_batch.add_rendered(m_pose_a); m_batch.add_rendered(m_pose_b); } void MyBuiltinCubeScene::prerender() { m_camera.prerender(); m_batch.prerender(); } void MyBuiltinCubeScene::render() { glutil::clear_screen(); m_pipeline.render(); }