Vertex exports all lights independently
This commit is contained in:
parent
950cc3ce16
commit
deec629ef4
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
noperspective in vec2 UV;
|
noperspective in vec2 UV;
|
||||||
in vec3 NORMAL;
|
in vec3 NORMAL;
|
||||||
flat in vec3 LIGHT;
|
|
||||||
|
flat in vec3 AMBIENT;
|
||||||
|
flat in vec3 DIFFUSE;
|
||||||
|
flat in vec3 SPECULAR;
|
||||||
|
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
@ -30,6 +33,6 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!material.unshaded) {
|
if (!material.unshaded) {
|
||||||
FragColor *= vec4(LIGHT, 1.0);
|
FragColor *= vec4(AMBIENT + DIFFUSE + SPECULAR, 1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,10 @@ uniform mat4 PROJECTION;
|
|||||||
|
|
||||||
noperspective out vec2 UV; // PSX use affine texture mapping
|
noperspective out vec2 UV; // PSX use affine texture mapping
|
||||||
out vec3 NORMAL;
|
out vec3 NORMAL;
|
||||||
flat out vec3 LIGHT;
|
|
||||||
|
flat out vec3 AMBIENT;
|
||||||
|
flat out vec3 DIFFUSE;
|
||||||
|
flat out vec3 SPECULAR;
|
||||||
|
|
||||||
struct DirectionalLight {
|
struct DirectionalLight {
|
||||||
vec3 direction;
|
vec3 direction;
|
||||||
@ -31,19 +34,17 @@ void main() {
|
|||||||
NORMAL = (VIEW * MODEL * vec4(normal, 0.0)).xyz;
|
NORMAL = (VIEW * MODEL * vec4(normal, 0.0)).xyz;
|
||||||
|
|
||||||
// Flat shading, we compute light per vertex
|
// Flat shading, we compute light per vertex
|
||||||
vec3 ambient = directionalLight.ambient * directionalLight.color;
|
AMBIENT = directionalLight.ambient * directionalLight.color;
|
||||||
|
|
||||||
vec3 direction = -(VIEW * vec4(directionalLight.direction, 0.0)).xyz;
|
vec3 direction = -(VIEW * vec4(directionalLight.direction, 0.0)).xyz;
|
||||||
float diff = dot(normalize(direction), normalize(NORMAL));
|
float diff = dot(normalize(direction), normalize(NORMAL));
|
||||||
diff = max(diff, 0.0);
|
diff = max(diff, 0.0);
|
||||||
vec3 diffuse = directionalLight.diffuse * diff * directionalLight.color;
|
DIFFUSE = directionalLight.diffuse * diff * directionalLight.color;
|
||||||
|
|
||||||
vec3 viewDir = (VIEW * MODEL * vec4(pos, 1.0)).xyz;
|
vec3 viewDir = (VIEW * MODEL * vec4(pos, 1.0)).xyz;
|
||||||
vec3 reflectionDir = reflect(normalize(direction), normalize(NORMAL));
|
vec3 reflectionDir = reflect(normalize(direction), normalize(NORMAL));
|
||||||
float spec = dot(viewDir, reflectionDir);
|
float spec = dot(viewDir, reflectionDir);
|
||||||
spec = max(spec, 0.0);
|
spec = max(spec, 0.0);
|
||||||
spec = pow(spec, 2);
|
spec = pow(spec, 2);
|
||||||
vec3 specular = directionalLight.specular * spec * directionalLight.color;
|
SPECULAR = directionalLight.specular * spec * directionalLight.color;
|
||||||
|
|
||||||
LIGHT = ambient + diffuse + specular;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user