Lighting works... Just not properly
Commiting now so that there is something displaying for the lit scene.
This commit is contained in:
parent
98c6d3868c
commit
8ee0ab2edb
@ -14,7 +14,7 @@ namespace charcoal
|
||||
{
|
||||
class Pipeline : public builtin::Pipeline<ShaderProgram, Batch>, public WithCamera
|
||||
{
|
||||
public:
|
||||
protected:
|
||||
void prepare_opengl() override
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
@ -22,6 +22,7 @@ namespace charcoal
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare_opengl() {};
|
||||
|
||||
virtual void prepare_uniforms() {};
|
||||
|
@ -24,12 +24,12 @@ namespace charcoal
|
||||
|
||||
// Shader Data Types
|
||||
|
||||
struct Light
|
||||
struct PhongLight
|
||||
{
|
||||
typedef vec3 Power;
|
||||
typedef vec3 Fade;
|
||||
|
||||
Light(
|
||||
PhongLight(
|
||||
const Position& position,
|
||||
const Power& power,
|
||||
const ColorRGB& ambient,
|
||||
@ -53,9 +53,9 @@ namespace charcoal
|
||||
Fade fade;
|
||||
};
|
||||
|
||||
struct Material
|
||||
struct PhongMaterial
|
||||
{
|
||||
Material(
|
||||
PhongMaterial(
|
||||
float ambient = 1.0f,
|
||||
float diffuse = 1.0f,
|
||||
float specular = 0.0f,
|
||||
@ -86,11 +86,11 @@ namespace charcoal
|
||||
{
|
||||
void set_position(const Position& position) { this->position = position; }
|
||||
void set_normal(const Normal& normal) { this->normal = normal; }
|
||||
void set_material(const Material& material) { this->material = material; }
|
||||
void set_material(const PhongMaterial& material) { this->material = material; }
|
||||
|
||||
Position position;
|
||||
Normal normal;
|
||||
Material material;
|
||||
PhongMaterial material;
|
||||
};
|
||||
|
||||
struct PTVertex
|
||||
|
@ -38,9 +38,9 @@ namespace charcoal
|
||||
glUniformMatrix4fv(uniform_index, 1, transpose ? GL_TRUE : GL_FALSE, &matrix[0][0]);
|
||||
}
|
||||
|
||||
void uniform_lights(int uniform_index, const std::vector<Light>& lights)
|
||||
void uniform_lights(int uniform_index, const std::vector<PhongLight>& lights)
|
||||
{
|
||||
for (std::vector<Light>::size_type i = 0; i < lights.size(); ++i)
|
||||
for (std::vector<PhongLight>::size_type i = 0; i < lights.size(); ++i)
|
||||
{
|
||||
glUniform3fv(uniform_index++, 1, &lights[i].position[0]);
|
||||
glUniform3fv(uniform_index++, 1, &lights[i].power[0]);
|
||||
|
@ -19,7 +19,7 @@ namespace charcoal
|
||||
void uniform_float(int uniform_index, float value);
|
||||
void uniform_vec3(int uniform_index, const vec3& value);
|
||||
void uniform_matrix(int uniform_index, const mat4& matrix, bool transpose = false);
|
||||
void uniform_lights(int uniform_index, const std::vector<Light>& lights); // TODO: This may want to be moved somewhere else
|
||||
void uniform_lights(int uniform_index, const std::vector<PhongLight>& lights); // TODO: This may want to be moved somewhere else
|
||||
}
|
||||
}
|
||||
}
|
@ -16,6 +16,16 @@ namespace charcoal
|
||||
class Pipeline : public builtin::Pipeline<ShaderProgram, Batch>, public WithCamera
|
||||
{
|
||||
public:
|
||||
void reset_lights()
|
||||
{
|
||||
m_lights.clear();
|
||||
}
|
||||
|
||||
void add_light(const Light& light)
|
||||
{
|
||||
m_lights.push_back(light);
|
||||
}
|
||||
protected:
|
||||
void prepare_opengl() override
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@ -25,7 +35,12 @@ namespace charcoal
|
||||
void prepare_uniforms() override
|
||||
{
|
||||
glutil::uniform_matrix(0, get_camera()->get_world_to_view_matrix());
|
||||
glutil::uniform_vec3(4, get_camera()->get_position());
|
||||
glutil::uniform_uint(5, m_lights.size());
|
||||
glutil::uniform_lights(6, m_lights);
|
||||
}
|
||||
private:
|
||||
std::vector<PhongLight> m_lights;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
#include "BuiltinTypes.h"
|
||||
|
||||
|
||||
namespace charcoal
|
||||
{
|
||||
namespace builtin
|
||||
{
|
||||
namespace lit
|
||||
{
|
||||
typedef PhongLight Light;
|
||||
typedef PNMVertex Vertex;
|
||||
typedef Index Index;
|
||||
typedef RenderableT<Vertex, Index> Renderable;
|
||||
|
@ -14,7 +14,7 @@ namespace charcoal
|
||||
{
|
||||
class Pipeline : public builtin::Pipeline<ShaderProgram, Batch>, public WithCamera
|
||||
{
|
||||
public:
|
||||
protected:
|
||||
void prepare_opengl() override
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
@ -13,7 +13,8 @@ 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_batch(&m_shape, 2),
|
||||
m_light(Position(0.0f, 5.0f, 0.0f), PhongLight::Power(0.1f, 100.0f, 1.0f), ColorRGB(1.0f, 1.0f, 1.0f), ColorRGB(1.0f, 1.0f, 1.0f), ColorRGB(1.0f, 1.0f, 1.0f), PhongLight::Fade(1.0f, 0.1f, 0.01f))
|
||||
{
|
||||
m_pipeline.add_batch(&m_batch);
|
||||
m_pipeline.set_camera(&m_camera);
|
||||
@ -65,6 +66,9 @@ void MyBuiltinLitScene::update(float delta_time, clock_t clock)
|
||||
m_batch.reset_rendered();
|
||||
m_batch.add_rendered(m_pose_a);
|
||||
m_batch.add_rendered(m_pose_b);
|
||||
|
||||
m_pipeline.reset_lights();
|
||||
m_pipeline.add_light(m_light);
|
||||
}
|
||||
|
||||
void MyBuiltinLitScene::prerender()
|
||||
|
@ -11,8 +11,6 @@ using namespace charcoal::builtin;
|
||||
class MyBuiltinLitScene : public Scene
|
||||
{
|
||||
public:
|
||||
// TODO: Add the lights!
|
||||
// This should be done in the pipeline!
|
||||
MyBuiltinLitScene(Application& application);
|
||||
|
||||
void init() override;
|
||||
@ -34,6 +32,8 @@ private:
|
||||
|
||||
lit::Pipeline m_pipeline;
|
||||
|
||||
lit::Light m_light;
|
||||
|
||||
Poseable m_pose_a;
|
||||
Poseable m_pose_b;
|
||||
};
|
Loading…
Reference in New Issue
Block a user