Getters/Setters for basic lights
This commit is contained in:
parent
335f596393
commit
a792d05ba1
@ -22,7 +22,37 @@
|
|||||||
*/
|
*/
|
||||||
#include "Light.h"
|
#include "Light.h"
|
||||||
|
|
||||||
Name Light::GetType() const {return "Light";}
|
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::Duplicate() {
|
||||||
Light *light = static_cast<Light*>(Spatial::Duplicate());
|
Light *light = static_cast<Light*>(Spatial::Duplicate());
|
||||||
@ -42,6 +72,8 @@ Light *Light::Create() {
|
|||||||
return new Light;
|
return new Light;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Name Light::GetType() const {return "Light";}
|
||||||
|
|
||||||
Name DirectionalLight::GetType() const {return "DirectionalLight";}
|
Name DirectionalLight::GetType() const {return "DirectionalLight";}
|
||||||
|
|
||||||
DirectionalLight::DirectionalLight() {
|
DirectionalLight::DirectionalLight() {
|
||||||
|
62
core/Light.h
62
core/Light.h
@ -27,16 +27,72 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "Spatial.h"
|
#include "Spatial.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
All lights have color as well as ambient, diffuse, and specular properties.
|
||||||
|
In the future, light properties might be a color, but for now they are
|
||||||
|
strength modulations on the main light color.
|
||||||
|
*/
|
||||||
class Light : public Spatial {
|
class Light : public Spatial {
|
||||||
public:
|
public:
|
||||||
Vector3 color;
|
|
||||||
float ambient, diffuse, specular;
|
/**
|
||||||
virtual Name GetType() const;
|
Get the color property of this light
|
||||||
|
@returns The color property
|
||||||
|
*/
|
||||||
|
Vector3 GetColor();
|
||||||
|
/**
|
||||||
|
Set the color property of this light
|
||||||
|
@param color The desired color.
|
||||||
|
*/
|
||||||
|
void SetColor(Vector3 color);
|
||||||
|
|
||||||
|
/** Ambient light is how much light is emitted from an object illuminated by
|
||||||
|
this light with no accounting for incidence angle or the location of the observer.
|
||||||
|
@returns The ambient intensity
|
||||||
|
*/
|
||||||
|
float GetAmbient();
|
||||||
|
/** Set the ambient light intensity.
|
||||||
|
@param ambient The desired ambient intensity for this light.
|
||||||
|
*/
|
||||||
|
void SetAmbient(float ambient);
|
||||||
|
|
||||||
|
/** Diffuse light is how much light is reflected by an object illuminated
|
||||||
|
by this light, accounting for incidence angle of the light but not the
|
||||||
|
location of the observer.
|
||||||
|
@returns The diffuse intensity.
|
||||||
|
*/
|
||||||
|
float GetDiffuse();
|
||||||
|
/** Set the diffuse intensity.
|
||||||
|
@param diffuse The desired diffuse intensity for this light
|
||||||
|
*/
|
||||||
|
void SetDiffuse(float diffuse);
|
||||||
|
|
||||||
|
/** Specular light is how much light is reflected by an object illuminated
|
||||||
|
by this light, taking into account both the incidence angle of the light
|
||||||
|
as well as the location of the observer. This is what creates the
|
||||||
|
"Specular Artifact", the shiny bit on a 3D sphere.
|
||||||
|
@returns The specular intensity
|
||||||
|
*/
|
||||||
|
float GetSpecular();
|
||||||
|
/** Set the specular intensity.
|
||||||
|
@param specular The desired specular intensity for this light.
|
||||||
|
*/
|
||||||
|
void SetSpecular(float specular);
|
||||||
|
|
||||||
virtual Light *Create();
|
virtual Light *Create();
|
||||||
virtual Light *Duplicate();
|
virtual Light *Duplicate();
|
||||||
virtual Light *Instance();
|
virtual Light *Instance();
|
||||||
|
|
||||||
|
virtual Name GetType() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Vector3 color;
|
||||||
|
float ambient, diffuse, specular;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Directional lights are infinitely far away lights that illuminate the whole world.
|
||||||
|
*/
|
||||||
class DirectionalLight : public Light {
|
class DirectionalLight : public Light {
|
||||||
public:
|
public:
|
||||||
Vector3 direction;
|
Vector3 direction;
|
||||||
|
@ -75,11 +75,11 @@ void Shader::UpdateMaterial(Material material) {
|
|||||||
|
|
||||||
void Shader::UpdateDirectionalLight(DirectionalLight directionalLight) {
|
void Shader::UpdateDirectionalLight(DirectionalLight directionalLight) {
|
||||||
glUniform3fv(glGetUniformLocation(id, "directionalLight.direction"), 1, glm::value_ptr(directionalLight.direction));
|
glUniform3fv(glGetUniformLocation(id, "directionalLight.direction"), 1, glm::value_ptr(directionalLight.direction));
|
||||||
glUniform3fv(glGetUniformLocation(id, "directionalLight.color"), 1, glm::value_ptr(directionalLight.color));
|
glUniform3fv(glGetUniformLocation(id, "directionalLight.color"), 1, glm::value_ptr(directionalLight.GetColor()));
|
||||||
|
|
||||||
glUniform1f(glGetUniformLocation(id, "directionalLight.ambient"), directionalLight.ambient);
|
glUniform1f(glGetUniformLocation(id, "directionalLight.ambient"), directionalLight.GetAmbient());
|
||||||
glUniform1f(glGetUniformLocation(id, "directionalLight.diffuse"), directionalLight.diffuse);
|
glUniform1f(glGetUniformLocation(id, "directionalLight.diffuse"), directionalLight.GetDiffuse());
|
||||||
glUniform1f(glGetUniformLocation(id, "directionalLight.specular"), directionalLight.specular);
|
glUniform1f(glGetUniformLocation(id, "directionalLight.specular"), directionalLight.GetSpecular());
|
||||||
}
|
}
|
||||||
|
|
||||||
Name Shader::GetName() const {
|
Name Shader::GetName() const {
|
||||||
|
@ -38,10 +38,10 @@ function init()
|
|||||||
|
|
||||||
local light = couch.DirectionalLight()
|
local light = couch.DirectionalLight()
|
||||||
light.direction = couch.Vector3(0.0, -1.0, -1.0)
|
light.direction = couch.Vector3(0.0, -1.0, -1.0)
|
||||||
light.color = couch.Vector3(1.0, 1.0, 1.0)
|
light:SetColor(couch.Vector3(1.0, 1.0, 1.0))
|
||||||
light.ambient = 0.2
|
light:SetAmbient(0.2)
|
||||||
light.diffuse = 1.0
|
light:SetDiffuse(1.0)
|
||||||
light.specular = 0.1
|
light:SetSpecular(0.1)
|
||||||
couch.Node.GetRoot():AddChild(light:Instance())
|
couch.Node.GetRoot():AddChild(light:Instance())
|
||||||
|
|
||||||
local skybox = couch.Skybox.FromFiles(
|
local skybox = couch.Skybox.FromFiles(
|
||||||
|
Loading…
Reference in New Issue
Block a user