#include "vertex_standard.glsl" #include "motion_vectors_vs.glsl" uniform mat4x3 uMdl; uniform mat4 uPv; uniform mat4 uPvmPrev; uniform vec3 uInfo; out vec4 aColour; out vec2 aUv; out vec3 aNorm; out vec3 aCo; out vec3 aWorldCo; void main() { float w = (a_colour.g * 8.0)-5.5 + fract(uInfo.z+0.5); float c = -cos(w*0.2); float s = -sin(w*0.2); float r = 0.2; float w1 = clamp( w*4.0 - a_co.y*10.0, -1.0, 1.0 ) * (3.14159265*0.5); float c1 = cos(w1); float s1 = sin(w1); float yoff = step(0.01,fract(uInfo.z))*-0.5; mat4x3 mlocal; mlocal[0] = vec3(c1, s1,0.0); mlocal[1] = vec3(-s1,c1,0.0); mlocal[2] = vec3(0.0,0.0,1.0); mlocal[3] = vec3(c*r,uInfo.y*0.875 + s*r,uInfo.x*0.5); vec3 local_pos = mlocal * vec4( a_co, 1.0 ); vec3 world_pos = uMdl * vec4( local_pos, 1.0 ); vec4 vproj0 = uPv * vec4( world_pos, 1.0 ); vec4 vproj1 = uPvmPrev * vec4( local_pos, 1.0 ); // Output vs_motion_out( vproj0, vproj1 ); gl_Position = vproj0; aColour = a_colour; aUv = a_uv + vec2( floor(uInfo.z+0.5)*(1.0/64.0), yoff ); aNorm = mat3(uMdl) * mat3(mlocal) * a_norm; aCo = a_co; aWorldCo = world_pos; }