charcoal/OpenGLEngine/BasicScene.cpp

97 lines
2.2 KiB
C++
Raw Normal View History

#include "BasicScene.h"
#include "stdafx.h"
#include "GLUtil.h"
#include "MeshFactory.h"
namespace charcoal
{
namespace builtin
{
BasicScene::BasicScene(Application& application)
: Scene(application),
m_shape(MeshFactory<BasicVertex, BasicIndex>::gen(
DrawMode::DRAW_TRIANGLES,
BasicVertex({ -50.0f, 50.0f, 0.0f }),
BasicVertex({ 50.0f, 150.0f, 0.0f }),
BasicVertex({ -100.0f, -50.0f, 0.0f }),
BasicVertex({ 100.0f, -50.0f, 0.0f })
), DrawMode::DRAW_TRIANGLES),
m_batch(&m_shape, 2),
m_camera(m_screen_size)
{}
BasicScene::~BasicScene() {}
void BasicScene::init()
{
sizeof(BasicVertex);
sizeof(vec3);
m_batch.init();
}
void BasicScene::use()
{
// TODO: move to glutil
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
}
void BasicScene::unuse()
{
}
void BasicScene::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;
{
Poseable& pose = m_batch.get_pose(0);
pose.update_position(vec3(cos(radians) * 50, 0.0f, 0.0f));
}
{
Poseable& pose = m_batch.get_pose(1);
pose.update_position(vec3(0.0f, sin(radians) * 50, 0.0f));
}
vec2 camera_translation(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;
m_camera.translate(camera_translation * delta_time * 100.0f);
}
void BasicScene::prerender()
{
m_camera.prerender();
m_batch.prerender();
}
void BasicScene::render()
{
// TODO: This is not rendering :(
glutil::clear_screen();
m_shader_program.use();
glutil::uniform_matrix(0, m_camera.get_world_to_view_matrix());
m_batch.render();
}
}
}