SHARE
TWEET
Untitled
a guest
Sep 21st, 2014
135
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- attribute vec3 a_position;
- attribute vec3 a_normal;
- uniform mat4 u_proj;
- uniform mat4 u_world;
- struct Light
- {
- vec3 worldPos;
- float intensity;
- vec3 color;
- float range;
- };
- uniform Light u_lights[100];
- uniform int u_numLights;
- varying vec3 vHybridLightDir;
- varying vec3 vHybridLightPos;
- varying vec3 vHybridLightColor;
- varying float vHybridLightRange;
- varying vec3 vAmbientColor;
- varying vec3 vNormal;
- varying vec3 vWorldPosition;
- void main()
- {
- vHybridLightDir = vec3(0.0);
- vHybridLightPos = vec3(0.0);
- vHybridLightColor = vec3(0.0);
- vAmbientColor = vec3(0.0);
- vHybridLightRange = 0.0;
- vec4 worldPos = u_world * vec4(a_position, 1.0);
- vWorldPosition = worldPos.xyz;
- float weight = 0.0;
- vec3 l = vec3(0.0);
- float dotNL = 0.0;
- vec3 lightToVertex;
- float denom = 0.0;
- for (int i = 0; i < u_numLights; i++)
- {
- lightToVertex = u_lights[i].worldPos - worldPos.xyz;
- float dist = length(lightToVertex);
- float ratio = clamp(dist / 15.0, 0.0, 1.0);
- float atten = pow(cos(ratio * 3.14159265359) + 1, 2);
- atten *= 0.25;
- l = normalize(lightToVertex);
- dotNL = dot(a_normal, l);
- weight = atten * (dotNL * 0.5 + 0.5);
- vHybridLightPos += (weight * lightToVertex) / dist;
- denom += (weight / dist);
- }
- vHybridLightPos /= denom;
- vHybridLightPos += worldPos.xyz;
- vec3 hybridToVertex = normalize(vHybridLightPos - worldPos.xyz);
- for (int i = 0; i < u_numLights; i++)
- {
- lightToVertex = normalize(u_lights[i].worldPos - worldPos.xyz);
- vHybridLightColor += u_lights[i].color * max(dot(lightToVertex, hybridToVertex), 0.0);
- }
- vNormal = a_normal;
- gl_Position = u_proj * worldPos;
- }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
