67 lines
1.9 KiB
GLSL
67 lines
1.9 KiB
GLSL
#version 130
|
|
|
|
#define lc 4
|
|
varying vec4 diffuse[lc], pos, spos;//, ambient;//, col;
|
|
varying vec3 lightDir[lc]/*halfVector[lc], */;
|
|
//varying vec3 lightDir[lc]/*halfVector[lc], */;
|
|
varying vec3 normal, srcn;
|
|
varying float fogCoord, alpha;
|
|
|
|
uniform int lightsCount;
|
|
uniform bool acc_fog, shadows;
|
|
uniform mat4 mat;
|
|
|
|
void prepareLight(in int index, in vec3 p) {
|
|
vec4 lpos = gl_LightSource[index].position;
|
|
lightDir[index] = normalize(lpos.xyz - (p * lpos.w));
|
|
//halfVector[index] = normalize(lightDir[index] - normalize(p));
|
|
diffuse[index] = gl_FrontMaterial.diffuse * gl_LightSource[index].diffuse;
|
|
}
|
|
|
|
void main(void) {
|
|
float NdotL;
|
|
//col = gl_Color;
|
|
alpha = gl_Color.a;
|
|
normal = normalize(gl_NormalMatrix * gl_Normal);
|
|
srcn = gl_Normal;
|
|
pos = gl_ModelViewMatrix * gl_Vertex;
|
|
//v = normalize(-pos);
|
|
if (acc_fog) {
|
|
fogCoord = (gl_Fog.end - length(pos) * 0.85) / (gl_Fog.end - gl_Fog.start);
|
|
fogCoord = 1. - clamp(fogCoord, 0., 1.);
|
|
}
|
|
vec3 ldir;
|
|
if (lightsCount > 0) {
|
|
prepareLight(0, pos.xyz);
|
|
if (lightsCount > 1) {
|
|
prepareLight(1, pos.xyz);
|
|
if (lightsCount > 2) {
|
|
prepareLight(2, pos.xyz);
|
|
if (lightsCount > 3) {
|
|
prepareLight(3, pos.xyz);
|
|
diffuse[3] = gl_FrontMaterial.diffuse * gl_LightSource[3].diffuse;
|
|
/*if (lightsCount > 4) {
|
|
diffuse[4] = gl_FrontMaterial.diffuse * gl_LightSource[4].diffuse;
|
|
if (lightsCount > 5) {
|
|
diffuse[5] = gl_FrontMaterial.diffuse * gl_LightSource[5].diffuse;
|
|
if (lightsCount > 6) {
|
|
diffuse[6] = gl_FrontMaterial.diffuse * gl_LightSource[6].diffuse;
|
|
if (lightsCount > 6) {
|
|
diffuse[7] = gl_FrontMaterial.diffuse * gl_LightSource[7].diffuse;
|
|
}
|
|
}
|
|
}
|
|
}*/
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//ambient = gl_LightModel.ambient * gl_FrontMaterial.ambient;
|
|
gl_TexCoord[0] = gl_MultiTexCoord0;
|
|
gl_TexCoord[1] = gl_MultiTexCoord1;
|
|
gl_TexCoord[2] = gl_MultiTexCoord2;
|
|
gl_TexCoord[3] = gl_MultiTexCoord3;
|
|
gl_Position = ftransform();
|
|
spos = pos * mat;
|
|
}
|