1 | precision mediump float;
|
2 |
|
3 | attribute vec3 position, normal;
|
4 | attribute vec4 color;
|
5 | attribute vec2 uv;
|
6 |
|
7 | uniform mat4 model
|
8 | , view
|
9 | , projection
|
10 | , inverseModel;
|
11 | uniform vec3 eyePosition
|
12 | , lightPosition;
|
13 |
|
14 | varying vec3 f_normal
|
15 | , f_lightDirection
|
16 | , f_eyeDirection
|
17 | , f_data;
|
18 | varying vec4 f_color;
|
19 | varying vec2 f_uv;
|
20 |
|
21 | vec4 project(vec3 p) {
|
22 | return projection * view * model * vec4(p, 1.0);
|
23 | }
|
24 |
|
25 | void main() {
|
26 | gl_Position = project(position);
|
27 |
|
28 |
|
29 | vec4 cameraCoordinate = view * vec4(position , 1.0);
|
30 | cameraCoordinate.xyz /= cameraCoordinate.w;
|
31 | f_lightDirection = lightPosition - cameraCoordinate.xyz;
|
32 | f_eyeDirection = eyePosition - cameraCoordinate.xyz;
|
33 | f_normal = normalize((vec4(normal,0) * inverseModel).xyz);
|
34 |
|
35 | f_color = color;
|
36 | f_data = position;
|
37 | f_uv = uv;
|
38 | }
|