much better implicit IK solver
[carveJwlIkooP6JGAAIwe30JlM.git] / shaders / standard_skinned.vs
diff --git a/shaders/standard_skinned.vs b/shaders/standard_skinned.vs
new file mode 100644 (file)
index 0000000..5c959a0
--- /dev/null
@@ -0,0 +1,31 @@
+#include "vertex_standard.glsl"
+
+uniform mat4 uPv;
+uniform mat4x3 uTransforms[32];
+
+out vec4 aColour;
+out vec2 aUv;
+out vec3 aNorm;
+out vec3 aCo;
+out vec3 aWorldCo;
+
+void main()
+{
+   vec4 co_local = vec4( a_co, 1.0 );
+   vec3 co0 = uTransforms[ a_groups[0] ] * co_local;
+   vec3 co1 = uTransforms[ a_groups[1] ] * co_local;
+   vec3 co2 = uTransforms[ a_groups[2] ] * co_local;
+   vec3 n0  = mat3(uTransforms[ a_groups[0] ]) * a_norm;
+   vec3 n1  = mat3(uTransforms[ a_groups[1] ]) * a_norm;
+   vec3 n2  = mat3(uTransforms[ a_groups[2] ]) * a_norm;
+
+   vec3 world_pos = co0*a_weights[0] + co1*a_weights[1] + co2*a_weights[2];
+   vec3 world_normal = n0*a_weights[0] + n1*a_weights[1] + n2*a_weights[2];
+   
+   gl_Position = uPv * vec4( world_pos, 1.0 );
+   aColour = a_colour;
+   aUv = a_uv;
+   aNorm = world_normal;
+   aCo = a_co;
+   aWorldCo = world_pos;
+}