e3c85324c6
Also moved all the code for each pipeline into the header files rather than the .cpp files to keep it all in one place. Considering just moving all the code into one file just to make it easier to create new pipelines but that may be overkill and may make the project harder to maintain in the future.
79 lines
2.4 KiB
C++
79 lines
2.4 KiB
C++
#include "MyBuiltinCubeScene.h"
|
|
|
|
#include <charcoal/constants.h>
|
|
|
|
#include <charcoal-builtin/MeshGenerator.h>
|
|
|
|
#include <charcoal-builtin/GLUtil.h>
|
|
|
|
MyBuiltinCubeScene::MyBuiltinCubeScene(Application& application)
|
|
: Scene(application),
|
|
m_shape(meshgenerator::gen_cube_p<basic::Vertex, basic::Index>(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();
|
|
}
|
|
|