Use multi-pass rendering with seperate ambient and light shaders
This commit is contained in:
parent
b3b74dc2af
commit
4e3efa239c
10 changed files with 148 additions and 48 deletions
8
shader/ambient.frag
Normal file
8
shader/ambient.frag
Normal file
|
@ -0,0 +1,8 @@
|
|||
uniform sampler2D tex;
|
||||
|
||||
varying vec4 ambient;
|
||||
|
||||
|
||||
void main() {
|
||||
gl_FragColor = ambient * texture2D(tex, gl_TexCoord[0].st);
|
||||
}
|
8
shader/ambient.vert
Normal file
8
shader/ambient.vert
Normal file
|
@ -0,0 +1,8 @@
|
|||
varying vec4 ambient;
|
||||
|
||||
void main() {
|
||||
ambient = gl_LightModel.ambient * gl_FrontMaterial.ambient;
|
||||
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
gl_Position = ftransform();
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
uniform sampler2D tex;
|
||||
|
||||
varying vec4 diffuse, ambientGlobal, ambient;
|
||||
varying vec4 diffuse, ambient;
|
||||
varying vec3 normal, pos;
|
||||
|
||||
|
||||
|
@ -10,8 +10,6 @@ void main() {
|
|||
vec4 color, specularColor;
|
||||
float dist, att, specularFactor;
|
||||
|
||||
color = ambientGlobal;
|
||||
|
||||
n = normalize(normal);
|
||||
|
||||
l = gl_LightSource[0].position.xyz - pos;
|
||||
|
@ -26,7 +24,7 @@ void main() {
|
|||
att = 1.0 / (gl_LightSource[0].constantAttenuation +
|
||||
gl_LightSource[0].linearAttenuation * dist +
|
||||
gl_LightSource[0].quadraticAttenuation * dist * dist);
|
||||
color += att * (diffuse * NdotL + ambient);
|
||||
color = att * (diffuse * NdotL + ambient);
|
||||
|
||||
refl = normalize(reflect(-l, n));
|
||||
eye = normalize(-pos);
|
||||
|
@ -34,10 +32,10 @@ void main() {
|
|||
RdotE = max(dot(refl, eye), 0.0);
|
||||
specularFactor = att * pow(RdotE, gl_FrontMaterial.shininess);
|
||||
specularColor = specularFactor * gl_FrontMaterial.specular * gl_LightSource[0].specular;
|
||||
|
||||
gl_FragColor = color * texture2D(tex, gl_TexCoord[0].st) + specularColor;
|
||||
}
|
||||
else {
|
||||
specularColor = vec4(0, 0, 0, 1);
|
||||
gl_FragColor = vec4(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
gl_FragColor = color * texture2D(tex, gl_TexCoord[0].st) + specularColor;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
varying vec4 diffuse, ambientGlobal, ambient;
|
||||
varying vec4 diffuse, ambient;
|
||||
varying vec3 normal, pos;
|
||||
|
||||
|
||||
|
@ -10,7 +10,6 @@ void main() {
|
|||
diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse;
|
||||
|
||||
ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
|
||||
ambientGlobal = gl_LightModel.ambient * gl_FrontMaterial.ambient;
|
||||
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
gl_Position = ftransform();
|
Reference in a new issue