Add Directional Light to world class

This commit is contained in:
4VRDriver
2020-09-15 13:46:17 +02:00
parent 6dd36f4254
commit 56190d3cb6
8 changed files with 95 additions and 53 deletions

View File

@@ -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();
}