import phong; 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)); }