multiple lights
This commit is contained in:
parent
1ec82871ad
commit
abffb2fe7c
|
@ -15,7 +15,7 @@ test.out: test.o $(OBJ)
|
||||||
gcc -o $@ test.o $(OBJ) $(ALL_LIBS)
|
gcc -o $@ test.o $(OBJ) $(ALL_LIBS)
|
||||||
|
|
||||||
%Shader.c: %Shader.glsl
|
%Shader.c: %Shader.glsl
|
||||||
xxd -i $? > $@
|
xxd -i $? | tac | sed "3s/$$/, 0x00/" | tac > $@
|
||||||
|
|
||||||
main.o: $(SHADERS) matrixMath.h transformation.h wavefrontobj.h sceneGraph.h objectHandler.h shader.h
|
main.o: $(SHADERS) matrixMath.h transformation.h wavefrontobj.h sceneGraph.h objectHandler.h shader.h
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,9 @@ flat in mat3 TBN;
|
||||||
uniform float shininess;
|
uniform float shininess;
|
||||||
|
|
||||||
uniform vec4 ambientLight;
|
uniform vec4 ambientLight;
|
||||||
uniform vec3 lightPosition;
|
uniform vec3 lightPositions[2];
|
||||||
|
uniform float lightBrightness[2];
|
||||||
|
|
||||||
uniform vec4 lightColor;
|
uniform vec4 lightColor;
|
||||||
|
|
||||||
uniform sampler2D textureSampler;
|
uniform sampler2D textureSampler;
|
||||||
|
@ -27,12 +29,15 @@ void main() {
|
||||||
|
|
||||||
vec3 lightDir = normalize(lightPosition - fragmentPosition);
|
vec3 lightDir = normalize(lightPosition - fragmentPosition);
|
||||||
vec3 eyeDir = (-normalize(fragmentPosition));
|
vec3 eyeDir = (-normalize(fragmentPosition));
|
||||||
|
for (int i = 0; i < lightPositions.length(); i++) {
|
||||||
|
vec3 lightDir = normalize(lightPositions[i] - fragmentPosition);
|
||||||
|
|
||||||
float diff = max(dot(norm, lightDir), 0.0);
|
|
||||||
|
|
||||||
vec3 halfway = (lightDir + eyeDir) / length(lightDir + eyeDir);
|
sumDiffusion += max(dot(norm, lightDir), 0.0) * lightBrightness[i];
|
||||||
float specular = pow(max(dot(halfway, norm), 0.0), shininess);
|
|
||||||
|
|
||||||
|
vec3 halfway = (lightDir + eyeDir) / length(lightDir + eyeDir);
|
||||||
|
sumSpecular += pow(max(dot(halfway, norm), 0.0), shininess);
|
||||||
|
}
|
||||||
|
|
||||||
gl_FragColor =
|
gl_FragColor =
|
||||||
// EMISSION
|
// EMISSION
|
||||||
|
@ -42,8 +47,8 @@ void main() {
|
||||||
ambientLight * color +
|
ambientLight * color +
|
||||||
|
|
||||||
// DIFFUSION
|
// DIFFUSION
|
||||||
color * diff +
|
color * sumDiffusion +
|
||||||
|
|
||||||
// SPECULAR
|
// SPECULAR
|
||||||
specular * lightColor * color;
|
sumSpecular * lightColor * color;
|
||||||
}
|
}
|
|
@ -296,13 +296,17 @@ void draw(void) {
|
||||||
glUniformMatrix4fv(glGetUniformLocation(program, "projection"), 1, GL_FALSE, (GLfloat*)&projection);
|
glUniformMatrix4fv(glGetUniformLocation(program, "projection"), 1, GL_FALSE, (GLfloat*)&projection);
|
||||||
|
|
||||||
// SET LIGHT DATA
|
// SET LIGHT DATA
|
||||||
glUniform4f(glGetUniformLocation(program, "lightColor"), 1.0f, 1.0f, 1.0f, 1.0f);
|
glUniform4f(glGetUniformLocation(program, "lightColor"), 0.2f, 0.2f, 0.2f, 0.5f);
|
||||||
glUniform4f(glGetUniformLocation(program, "ambientLight"), 0.05f, 0.05f, 0.05f, 1.0f);
|
glUniform4f(glGetUniformLocation(program, "ambientLight"), 0.05f, 0.05f, 0.05f, 1.0f);
|
||||||
|
|
||||||
vec4 lightPosition = {cos(stepi) * 5.0f, 5.0f, sin(stepi) * 5.0f, 1.0f};
|
vec4 lightPosition = {cos(stepi) * 5.0f, 5.0f, sin(stepi) * 5.0f, 1.0f};
|
||||||
multiplyAny((GLfloat*)&lightPosition, (GLfloat*)&viewingTransformation, (GLfloat*)&lightPosition, 4, 4, 1);
|
multiplyAny((GLfloat*)&lightPosition, (GLfloat*)&viewingTransformation, (GLfloat*)&lightPosition, 4, 4, 1);
|
||||||
|
|
||||||
glUniform3f(glGetUniformLocation(program, "lightPosition"), lightPosition.x, lightPosition.y, lightPosition.z);
|
glUniform3f(glGetUniformLocation(program, "lightPositions[0]"), lightPosition.x, lightPosition.y, lightPosition.z);
|
||||||
|
glUniform3f(glGetUniformLocation(program, "lightPositions[1]"), -lightPosition.x, lightPosition.y, -lightPosition.z);
|
||||||
|
|
||||||
|
glUniform1f(glGetUniformLocation(program, "lightBrightness[0]"), 0.5f);
|
||||||
|
glUniform1f(glGetUniformLocation(program, "lightBrightness[1]"), 0.5f);
|
||||||
|
|
||||||
|
|
||||||
renderSceneNode(rootNode);
|
renderSceneNode(rootNode);
|
||||||
|
|
Loading…
Reference in New Issue