attribute vec4 in_position; attribute vec3 in_normal; attribute vec2 in_uv; varying vec3 npos; varying vec3 normal, binormal, tangent; varying vec2 uv; uniform float flipState; void main() { normal = normalize(gl_NormalMatrix * in_normal); binormal = normalize(cross(normal, gl_NormalMatrix * vec3(0.0,0.999,0.04471017781))); tangent = normalize(cross(normal, binormal)); vec4 pos = gl_ModelViewMatrix * in_position; npos = -pos.xyz; vec2 baseUV = in_uv; if(flipState < 0.5) { if(flipState < 0.25) { baseUV.x = 1.0 - baseUV.x; binormal = -binormal; } } else { if(flipState < 0.75) { baseUV.y = 1.0 - baseUV.y; tangent = -tangent; } else { baseUV = vec2(1.0) - baseUV; binormal = -binormal; tangent = -tangent; } } uv = baseUV; gl_Position = gl_ProjectionMatrix * pos; }