const int CAMSHAKE_STILL = 0; const int CAMSHAKE_ONE_HAND = 1; const int CAMSHAKE_SLOW_WALK = 2; const int CAMSHAKE_FAST_WALK = 3; vec4 readShakeTrack(int track, float time) { vec4 shake = texture2D(iShakeTexture, vec2((time * 30.) / 1024., (float(track) + 0.5) / 4.)); shake *= vec4(298.9801894102875, 268.15706491470337, 0.04235362283476297, 1.0); shake += vec4(-120.21135719270364, -142.22203880491924, -1.5530782050492652e-11, 0.); return shake; } void applyShake(inout vec3 dir, vec4 shake) { mat2 rollMatrix = mat2(cos(shake.z), sin(shake.z), -sin(shake.z), cos(shake.z)); dir.xy = rollMatrix * dir.xy; dir.xy += shake.xy / 1920.; dir = normalize(dir); }