Skip to content

Commit d3d0c71

Browse files
committed
Fixed shader for clip-space
1 parent b1a5ce7 commit d3d0c71

4 files changed

Lines changed: 23 additions & 16 deletions

File tree

src/renderer/webgl/shaders/PointLight-frag.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ module.exports = [
33
'',
44
'precision mediump float;',
55
'',
6-
'varying vec2 lightPosition;',
6+
'varying vec4 lightPosition;',
77
'varying vec4 lightColor;',
88
'varying float lightRadius;',
99
'',
1010
'void main()',
1111
'{',
1212
' vec2 res = vec2(800.0, 600.0);',
13-
' vec2 center = vec2(lightPosition.x, res.y - lightPosition.y);',
13+
'',
14+
' vec2 center = vec2((lightPosition.x + 1.0) * (res.x / 2.0), (lightPosition.y + 1.0) * (res.y / 2.0));',
1415
'',
1516
' float distance = length(center.xy - gl_FragCoord.xy);',
1617
'',
17-
' // float intensity = 1.0 - min(distance, lightRadius) / lightRadius;',
18-
' float intensity = clamp(1.0 - distance * distance / (lightRadius * lightRadius), 0.0, 1.0);',
18+
' float intensity = 1.0 - min(distance, lightRadius) / lightRadius;',
19+
' // float intensity = clamp(1.0 - distance * distance / (lightRadius * lightRadius), 0.0, 1.0);',
1920
'',
2021
' vec4 color = vec4(intensity, intensity, intensity, 0.0) * vec4(lightColor.r, lightColor.g, lightColor.b, 1.0);',
2122
'',

src/renderer/webgl/shaders/PointLight-vert.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,19 @@ module.exports = [
1212
'attribute vec4 inLightColor;',
1313
'attribute float inLightRadius;',
1414
'',
15-
'varying vec2 lightPosition;',
15+
'varying vec4 lightPosition;',
1616
'varying vec4 lightColor;',
1717
'varying float lightRadius;',
1818
'',
1919
'void main ()',
2020
'{',
21-
' lightRadius = inLightRadius;',
21+
' mat4 mvp = uProjectionMatrix * uViewMatrix * uModelMatrix;',
22+
'',
2223
' lightColor = inLightColor;',
23-
' lightPosition = inLightPosition;',
24+
' lightRadius = inLightRadius;',
25+
' lightPosition = mvp * vec4(inLightPosition, 1.0, 1.0);',
2426
'',
25-
' gl_Position = uProjectionMatrix * uViewMatrix * uModelMatrix * vec4(inPosition, 1.0, 1.0);',
27+
' gl_Position = mvp * vec4(inPosition, 1.0, 1.0);',
2628
'}',
2729
''
2830
].join('\n');

src/renderer/webgl/shaders/src/PointLight.frag

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@
22

33
precision mediump float;
44

5-
varying vec2 lightPosition;
5+
varying vec4 lightPosition;
66
varying vec4 lightColor;
77
varying float lightRadius;
88

99
void main()
1010
{
11+
// Half these and pass as uniform
1112
vec2 res = vec2(800.0, 600.0);
12-
vec2 center = vec2(lightPosition.x, res.y - lightPosition.y);
13+
14+
vec2 center = vec2((lightPosition.x + 1.0) * (res.x / 2.0), (lightPosition.y + 1.0) * (res.y / 2.0));
1315

1416
float distance = length(center.xy - gl_FragCoord.xy);
1517

16-
// float intensity = 1.0 - min(distance, lightRadius) / lightRadius;
17-
float intensity = clamp(1.0 - distance * distance / (lightRadius * lightRadius), 0.0, 1.0);
18+
float intensity = 1.0 - min(distance, lightRadius) / lightRadius;
19+
// float intensity = clamp(1.0 - distance * distance / (lightRadius * lightRadius), 0.0, 1.0);
1820

1921
vec4 color = vec4(intensity, intensity, intensity, 0.0) * vec4(lightColor.r, lightColor.g, lightColor.b, 1.0);
2022

src/renderer/webgl/shaders/src/PointLight.vert

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,17 @@ attribute vec2 inLightPosition;
1111
attribute vec4 inLightColor;
1212
attribute float inLightRadius;
1313

14-
varying vec2 lightPosition;
14+
varying vec4 lightPosition;
1515
varying vec4 lightColor;
1616
varying float lightRadius;
1717

1818
void main ()
1919
{
20-
lightRadius = inLightRadius;
20+
mat4 mvp = uProjectionMatrix * uViewMatrix * uModelMatrix;
21+
2122
lightColor = inLightColor;
22-
lightPosition = inLightPosition;
23+
lightRadius = inLightRadius;
24+
lightPosition = mvp * vec4(inLightPosition, 1.0, 1.0);
2325

24-
gl_Position = uProjectionMatrix * uViewMatrix * uModelMatrix * vec4(inPosition, 1.0, 1.0);
26+
gl_Position = mvp * vec4(inPosition, 1.0, 1.0);
2527
}

0 commit comments

Comments
 (0)