X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=demos%2Fdesertpillars%2Fdata%2Fsphere_morph.glsl;fp=demos%2Fdesertpillars%2Fdata%2Fsphere_morph.glsl;h=e020ed68f4b9f80e71ef4f930b79be7458942b1e;hb=e03a752116ab28283bf89dddf1228804cc853a7b;hp=0000000000000000000000000000000000000000;hpb=7834588fc4f3846641bb9eed680a8890b8852a9a;p=libs%2Fgl.git diff --git a/demos/desertpillars/data/sphere_morph.glsl b/demos/desertpillars/data/sphere_morph.glsl new file mode 100644 index 00000000..e020ed68 --- /dev/null +++ b/demos/desertpillars/data/sphere_morph.glsl @@ -0,0 +1,36 @@ +uniform Morph +{ + float morph; +}; + +const float PI = 3.1415926535; +const float OFFSET = 0.001; + +#pragma MSP stage(vertex) +vec3 deform(vec3 p) +{ + vec3 d = cos(p*(2.0*PI)+morph)*0.05; + return p*(1.0+(d.x+d.y+d.z)*sin(morph*0.2)); +} + +vec4 get_vertex_position() override +{ + return vec4(deform(vertex.xyz), 1.0); +} + +vec3 get_vertex_normal() override +{ + vec3 tangent; + if(abs(normal.x)>abs(normal.y)) + tangent = normalize(vec3(-normal.z, 0.0, normal.x)); + else + tangent = normalize(vec3(0.0, -normal.z, normal.y)); + vec3 binormal = cross(normal, tangent); + + vec3 xn = deform(vertex.xyz-tangent*OFFSET); + vec3 xp = deform(vertex.xyz+tangent*OFFSET); + vec3 yn = deform(vertex.xyz-binormal*OFFSET); + vec3 yp = deform(vertex.xyz+binormal*OFFSET); + + return normalize(cross(xp-xn, yp-yn)); +}