charcoal/Example/MyBuiltinLitScene.cpp
elipzer 98c6d3868c Added the base to the lit pipeline.
Still need to allow for adding lights!
2018-10-15 19:53:22 -04:00

82 lines
2.5 KiB
C++

#include "MyBuiltinLitScene.h"
#include <charcoal/constants.h>
#include <charcoal-builtin/MeshGenerator.h>
#include <charcoal-builtin/GLUtil.h>
// TODO: Consider just making a template class for testing out stuff like this...
// Especially considering that update and render are probably going to be relatively similar almost every time.
MyBuiltinLitScene::MyBuiltinLitScene(Application& application)
: Scene(application),
m_shape(meshgenerator::gen_cube_p<lit::Vertex, lit::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 MyBuiltinLitScene::init()
{
m_batch.init();
}
void MyBuiltinLitScene::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 MyBuiltinLitScene::prerender()
{
m_camera.prerender();
m_batch.prerender();
}
void MyBuiltinLitScene::render()
{
glutil::clear_screen();
m_pipeline.render();
}