CSC8502_Advanced_Graphics_For_Games / Shaders / SkinningVertex.glsl
SkinningVertex.glsl
Raw
#version 400

uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;

in vec3 position;
in vec2 texCoord;
in vec4 jointWeights;
in ivec4 jointIndices;

uniform mat4 joints[128];

out Vertex{
	vec2 texCoord;
} OUT;

void main (void) {
	vec4 localPos = vec4(position, 1.0f);
	vec4 skelPos = vec4(0,0,0,0);

	for(int i = 0; i < 4; ++i){
		int jointIndex = jointIndices[i];
		float jointWeight = jointWeights[i];
	
		skelPos += joints[jointIndex] * localPos * jointWeight;
	}
	mat4 mvp = projMatrix * viewMatrix * modelMatrix;
	gl_Position = mvp * vec4(skelPos.xyz, 1.0);
	OUT.texCoord = texCoord;
}