Program Listing for File PointLight.cpp
↰ Return to documentation for file (Src/GraphicsEngineOpenGL/scene/light/point_light/PointLight.cpp
)
#include "scene/light/point_light/PointLight.hpp"
PointLight::PointLight()
:
position(glm::vec3(0.0f)), constant(1.0f), linear(0.0f), exponent(0.0f), far_plane(0.f)
{}
PointLight::PointLight(GLuint shadow_width,
GLuint shadow_height,
GLfloat near,
GLfloat far,
GLfloat red,
GLfloat green,
GLfloat blue,
GLfloat radiance,
GLfloat x_pos,
GLfloat y_pos,
GLfloat z_pos,
GLfloat con,
GLfloat lin,
GLfloat exp)
:
Light(red, green, blue, radiance), omni_dir_shadow_map(std::make_shared<OmniDirShadowMap>()),
position(glm::vec3(x_pos, y_pos, z_pos)), constant(con), linear(lin), exponent(exp), far_plane(far)
{
float aspect = (float)shadow_width / (float)shadow_height;
light_proj = glm::perspective(glm::radians(90.0f), aspect, near, far);
omni_dir_shadow_map->init(shadow_width, shadow_height);
}
std::vector<glm::mat4> PointLight::calculate_light_transform()
{
std::vector<glm::mat4> light_matrices;
// make sure all light matrices align with the order we were defining in
// OmniShadowMap GL_TEXTURE_CUBE_MAP_POSITIVE_X+i; therefoe start off with
// glm::vec3(1.0, 0.0,0.0) +x,-x
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(1.0, 0.0, 0.0), glm::vec3(0.0, -1.0, 0.0)));
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(-1.0, 0.0, 0.0), glm::vec3(0.0, -1.0, 0.0)));
//+y,-y
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(0.0, 1.0, 0.0), glm::vec3(0.0, 0.0, 1.0)));
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(0.0, -1.0, 0.0), glm::vec3(0.0, 0.0, -1.0)));
//+z,-z
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(0.0, 0.0, 1.0), glm::vec3(0.0, -1.0, 0.0)));
light_matrices.push_back(
light_proj * glm::lookAt(position, position + glm::vec3(0.0, 0.0, -1.0), glm::vec3(0.0, -1.0, 0.0)));
return light_matrices;
}
void PointLight::set_position(glm::vec3 position) { this->position = position; }
GLfloat PointLight::get_far_plane() { return far_plane; }
glm::vec3 PointLight::get_position() { return position; }
PointLight::~PointLight() {}