158 lines
3.5 KiB
C++
158 lines
3.5 KiB
C++
/*
|
|
Dane Johnson <dane@danejohnson.org>
|
|
|
|
LICENSE
|
|
|
|
Couch Copyright (C) 2021 Dane Johnson
|
|
|
|
This program comes with ABSOLUTELY NO WARRANTY; without event the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the GNU General Public License for details at
|
|
https://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
This is free software, and you are welcome to redistribute it
|
|
under the terms of the GNU General Public License as published
|
|
nnn by the Free Software Foundation; either version 3 of the License,
|
|
or (at your option) any later version.
|
|
|
|
DESCRIPTION
|
|
|
|
Lights provide lighting to a scene. They can be colored and support
|
|
ambient, diffuse, and specular properties.
|
|
*/
|
|
#include "Light.h"
|
|
|
|
Vector3 Light::GetColor() {
|
|
return color;
|
|
}
|
|
|
|
void Light::SetColor(Vector3 color) {
|
|
this->color = color;
|
|
}
|
|
|
|
float Light::GetAmbient() {
|
|
return ambient;
|
|
}
|
|
|
|
void Light::SetAmbient(float ambient) {
|
|
this->ambient = ambient;
|
|
}
|
|
|
|
float Light::GetDiffuse() {
|
|
return diffuse;
|
|
}
|
|
|
|
void Light::SetDiffuse(float diffuse) {
|
|
this->diffuse = diffuse;
|
|
}
|
|
|
|
float Light::GetSpecular() {
|
|
return specular;
|
|
}
|
|
|
|
void Light::SetSpecular(float specular) {
|
|
this->specular = specular;
|
|
}
|
|
|
|
Light *Light::Duplicate() {
|
|
Light *light = static_cast<Light*>(Spatial::Duplicate());
|
|
light->color = color;
|
|
light->ambient = ambient;
|
|
light->diffuse = diffuse;
|
|
light->specular = specular;
|
|
|
|
return light;
|
|
}
|
|
|
|
Light *Light::Instance() {
|
|
return static_cast<Light*>(Node::Instance());
|
|
}
|
|
|
|
Light *Light::Create() {
|
|
return new Light;
|
|
}
|
|
|
|
Name Light::GetType() const {return "Light";}
|
|
|
|
DirectionalLight::DirectionalLight() {
|
|
this->direction = Vector3(0.0f);
|
|
this->color = Vector3(0.0f);
|
|
this->ambient = 0.0f;
|
|
this->diffuse = 0.0f;
|
|
this->specular = 0.0f;
|
|
}
|
|
|
|
DirectionalLight::DirectionalLight(Vector3 direction, Vector3 color, float ambient, float diffuse, float specular) {
|
|
this->direction = direction;
|
|
this->color = color;
|
|
this->ambient = ambient;
|
|
this->diffuse = diffuse;
|
|
this->specular = specular;
|
|
}
|
|
|
|
Vector3 DirectionalLight::GetDirection() {
|
|
return direction;
|
|
}
|
|
|
|
void DirectionalLight::SetDirection(Vector3 direction) {
|
|
this->direction = direction;
|
|
}
|
|
|
|
DirectionalLight *DirectionalLight::Create() {
|
|
return new DirectionalLight;
|
|
}
|
|
|
|
DirectionalLight *DirectionalLight::Duplicate() {
|
|
DirectionalLight *directionalLight = static_cast<DirectionalLight*>(Light::Duplicate());
|
|
directionalLight->direction = direction;
|
|
|
|
return directionalLight;
|
|
}
|
|
|
|
DirectionalLight *DirectionalLight::Instance() {
|
|
return static_cast<DirectionalLight*>(Node::Instance());
|
|
}
|
|
|
|
Name DirectionalLight::GetType() const {return "DirectionalLight";}
|
|
|
|
PointLight::PointLight() {
|
|
this->radius = 0.0f;
|
|
this->color = Vector3(0.0f);
|
|
this->ambient = 0.0f;
|
|
this->diffuse = 0.0f;
|
|
this->specular = 0.0f;
|
|
}
|
|
|
|
PointLight::PointLight(float radius, Vector3 color, float ambient, float diffuse, float specular) {
|
|
this->radius = radius;
|
|
this->color = color;
|
|
this->ambient = ambient;
|
|
this->diffuse = diffuse;
|
|
this->specular = specular;
|
|
}
|
|
|
|
float PointLight::GetRadius() {
|
|
return radius;
|
|
}
|
|
|
|
void PointLight::SetRadius(float radius) {
|
|
this->radius = radius;
|
|
}
|
|
|
|
PointLight *PointLight::Create() {
|
|
return new PointLight;
|
|
}
|
|
|
|
PointLight *PointLight::Duplicate() {
|
|
PointLight *pointLight = static_cast<PointLight*>(Light::Duplicate());
|
|
pointLight->radius = radius;
|
|
|
|
return pointLight;
|
|
}
|
|
|
|
PointLight *PointLight::Instance() {
|
|
return static_cast<PointLight*>(Node::Instance());
|
|
}
|
|
|
|
Name PointLight::GetType() const {return "PointLight";}
|