X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fstandard_skinned.vs;fp=shaders%2Fstandard_skinned.vs;h=5c959a080752c0a35349b22483d33c75385d6c4b;hb=3d5597be2fd4b5d9ea3bf8863e15cc9bc8123755;hp=0000000000000000000000000000000000000000;hpb=1361a6d6ffda17feca6395beccf269763d3a76fa;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/standard_skinned.vs b/shaders/standard_skinned.vs new file mode 100644 index 0000000..5c959a0 --- /dev/null +++ b/shaders/standard_skinned.vs @@ -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; +}