-
Notifications
You must be signed in to change notification settings - Fork 16
/
TextureWarping-PincushionGrid.glsl
135 lines (104 loc) · 2.49 KB
/
TextureWarping-PincushionGrid.glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-- Grid.VS
layout(location = 0) in vec3 Position;
void main()
{
gl_Position = vec4(Position, 1);
}
-- Grid.FS
out vec4 FragColor;
void main()
{
FragColor = vec4(0,0,0.5,0.25);
}
-- Quad.VS
layout(location = 0) in vec3 Position;
layout(location = 1) in vec2 TexCoord;
out vec2 vTexCoord;
void main()
{
vTexCoord = TexCoord;
gl_Position = vec4(Position, 1);
}
-- Quad.FS
in vec2 vTexCoord;
out vec4 FragColor;
uniform sampler2D Sampler;
void main()
{
if (vTexCoord.s < 0 || vTexCoord.s > 1 ||
vTexCoord.t < 0 || vTexCoord.t > 1) {
FragColor = vec4(0, 0, 0, 1);
return;
}
FragColor = texture(Sampler, vTexCoord);
}
-- Simple.VS
layout(location = 0) in vec4 Position;
uniform mat4 ModelviewProjection[7];
void main()
{
gl_Position = ModelviewProjection[gl_InstanceID] * Position;
}
-- Simple.FS
out vec4 FragColor;
uniform vec4 Color;
void main()
{
FragColor = Color;
}
-- Lit.VS
layout(location = 0) in vec4 Position;
out vec3 vPosition;
out int vInstanceID;
uniform mat4 ModelviewProjection[7];
void main()
{
vInstanceID = gl_InstanceID;
vPosition = Position.xyz;
gl_Position = ModelviewProjection[gl_InstanceID] * Position;
}
-- Lit.GS
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
in vec3 vPosition[3];
out vec3 gNormal;
in int vInstanceID[3];
out float gDistance[4];
flat out int gInstanceID;
void main()
{
gInstanceID = vInstanceID[0];
vec3 A = vPosition[2] - vPosition[0];
vec3 B = vPosition[1] - vPosition[0];
gNormal = normalize(cross(A, B));
for (int j = 0; j < 3; j++) {
gl_Position = gl_in[j].gl_Position;
EmitVertex();
}
EndPrimitive();
}
-- Lit.FS
in vec3 gNormal;
flat in int gInstanceID;
out vec4 FragColor;
uniform vec3 AmbientMaterial = vec3(0.2, 0.2, 0.2);
uniform vec3 SpecularMaterial = vec3(0.5, 0.5, 0.5);
uniform vec4 FrontMaterial = vec4(0.75, 0.75, 0.5, 0.5);
uniform vec4 BackMaterial = vec4(0.75, 0.75, 0.5, 0.5);
uniform float Shininess = 7;
uniform vec3 Hhat[7];
uniform vec3 Lhat[7];
void main()
{
vec3 N = -normalize(gNormal);
if (!gl_FrontFacing)
N = -N;
float df = max(0.0, dot(N, Lhat[gInstanceID]));
float sf = max(0.0, dot(N, Hhat[gInstanceID]));
sf = pow(sf, Shininess);
vec3 diffuse = gl_FrontFacing ? FrontMaterial.rgb : BackMaterial.rgb;
vec3 lighting = AmbientMaterial + df * diffuse;
if (gl_FrontFacing)
lighting += sf * SpecularMaterial;
FragColor = vec4(lighting, FrontMaterial.a);
}