Add Directional Light to world class
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
// PointLight
|
||||
|
||||
PointLight::PointLight(ShaderProgram *shaderProgram)
|
||||
: Light(shaderProgram) {
|
||||
|
||||
@@ -9,32 +11,44 @@ PointLight::PointLight(ShaderProgram *shaderProgram)
|
||||
|
||||
void PointLight::update() {
|
||||
|
||||
std::string uName;
|
||||
shaderProgram->bind();
|
||||
|
||||
shaderProgram->setUniform((_getStructMemberName() + "isActive").c_str(), isActive);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "position").c_str(), position);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "ambient").c_str(), ambientColor);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "diffuse").c_str(), diffuseColor);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "specular").c_str(), specularColor);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "K_c").c_str(), K_c);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "K_l").c_str(), K_l);
|
||||
shaderProgram->setUniform((_getStructMemberName() + "K_q").c_str(), K_q);
|
||||
|
||||
shaderProgram->unbind();
|
||||
}
|
||||
|
||||
std::string PointLight::_getStructMemberName() {
|
||||
std::string temp = "u_pointLight[" + std::to_string(lightId) + "].";
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
// DirectionalLight
|
||||
|
||||
DirectionalLight::DirectionalLight(ShaderProgram *shaderProgram)
|
||||
: Light(shaderProgram) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DirectionalLight::update() {
|
||||
|
||||
shaderProgram->bind();
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].isActive";
|
||||
shaderProgram->setUniform(uName.c_str(), isActive);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].position";
|
||||
shaderProgram->setUniform(uName.c_str(), position);
|
||||
shaderProgram->setUniform("u_directionalLight.isActive", isActive);
|
||||
shaderProgram->setUniform("u_directionalLight.direction", direction);
|
||||
shaderProgram->setUniform("u_directionalLight.ambient", ambientColor * 0.25f);
|
||||
shaderProgram->setUniform("u_directionalLight.diffuse", diffuseColor * 0.25f);
|
||||
shaderProgram->setUniform("u_directionalLight.specular", specularColor * 0.25f);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].ambient";
|
||||
shaderProgram->setUniform(uName.c_str(), ambientColor);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].diffuse";
|
||||
shaderProgram->setUniform(uName.c_str(), diffuseColor);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].specular";
|
||||
shaderProgram->setUniform(uName.c_str(), specularColor);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].K_c";
|
||||
shaderProgram->setUniform(uName.c_str(), K_c);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].K_l";
|
||||
shaderProgram->setUniform(uName.c_str(), K_l);
|
||||
|
||||
uName = "u_pointLight[" + std::to_string(lightId) + "].K_q";
|
||||
shaderProgram->setUniform(uName.c_str(), K_q);
|
||||
shaderProgram->unbind();
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user