]> git.tdb.fi Git - libs/gl.git/blob - demos/desertpillars/data/sphere_morph.glsl
Rearrange some things in the shader library
[libs/gl.git] / demos / desertpillars / data / sphere_morph.glsl
1 import msp_interface;
2
3 uniform Morph
4 {
5         float morph;
6 };
7
8 const float PI = 3.1415926535;
9 const float OFFSET = 0.001;
10
11 #pragma MSP stage(vertex)
12 vec3 deform(vec3 p)
13 {
14         vec3 d = cos(p*(2.0*PI)+morph)*0.05;
15         return p*(1.0+(d.x+d.y+d.z)*sin(morph*0.2));
16 }
17
18 vec4 get_vertex_position() override
19 {
20         return vec4(deform(vertex.xyz), 1.0);
21 }
22
23 vec3 get_vertex_normal() override
24 {
25         vec3 tangent;
26         if(abs(normal.x)>abs(normal.y))
27                 tangent = normalize(vec3(-normal.z, 0.0, normal.x));
28         else
29                 tangent = normalize(vec3(0.0, -normal.z, normal.y));
30         vec3 binormal = cross(normal, tangent);
31
32         vec3 xn = deform(vertex.xyz-tangent*OFFSET);
33         vec3 xp = deform(vertex.xyz+tangent*OFFSET);
34         vec3 yn = deform(vertex.xyz-binormal*OFFSET);
35         vec3 yp = deform(vertex.xyz+binormal*OFFSET);
36
37         return normalize(cross(xp-xn, yp-yn));
38 }