-
Notifications
You must be signed in to change notification settings - Fork 0
/
3d_vs.glsl
57 lines (53 loc) · 1.54 KB
/
3d_vs.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
#version 330
uniform mat4 uniform_Transformation;
uniform mat4 uniform_Modelview;
uniform mat4 uniform_Projection;
uniform mat4 lightMatrix;
uniform float lightConstant;
uniform float lightLinear;
uniform float lightQuadratic;
uniform vec3 lightPos;
uniform vec3 eyePos;
uniform float time;
uniform float fogConstant;
uniform float fogLinear;
uniform float fogQuadratic;
in vec3 attribute_Position;
in vec2 texcoords;
in vec3 normal;
in vec3 transform;
out vec3 world_pass;
out vec2 texcoords_pass;
out float attenuation_pass;
out vec3 normals_pass;
out vec3 shadow_position_pass;
out vec3 toLight_pass;
out vec3 toEye_pass;
out float fog_pass;
void main(void)
{
vec4 pos = uniform_Transformation * vec4(attribute_Position+transform*time,1.0f);
world_pass=pos.xyz;
vec4 camrel = uniform_Modelview * pos;
texcoords_pass=texcoords;
normals_pass=(uniform_Transformation * -vec4(normal.x,normal.y,normal.z,0)).xyz;
toLight_pass=pos.xyz-lightPos;
float dtl=length(toLight_pass);
toLight_pass=normalize(toLight_pass);
toEye_pass = eyePos-pos.xyz;
float dte=length(toEye_pass);
toEye_pass=normalize(toEye_pass);
fog_pass=(fogConstant+dte*fogLinear+pow(dte,2)*fogQuadratic);
fog_pass=dte/fog_pass;
if (fog_pass > 1.0f) {
fog_pass=1.0f;
}
fog_pass=1.0f-fog_pass;
attenuation_pass=(lightConstant+dtl*lightLinear+pow(dtl,2)*lightQuadratic);
attenuation_pass=dtl/attenuation_pass;
if (attenuation_pass > 1.0f) {
attenuation_pass=1.0f;
}
shadow_position_pass=(lightMatrix*pos).xyz;
gl_Position=uniform_Projection * camrel;
}