diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-08-04 16:30:26 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-10 10:41:23 +0000 |
commit | c74ce04b4f3d25c21ccea6b836d30b4dbda2b6c0 (patch) | |
tree | 711c24efd654ae2267b381cc08fc52ff9fafe4d9 /tests | |
parent | a3e323ff404d4b77fabffaa22d19afb09297344d (diff) |
Extend skinned mesh manual test to consume skinning palette
Change-Id: I07e6d46e7f1350fe2d3e3fef86e751dc2a1f3d7d
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/manual/skinned-mesh/skinnedPbr.vert | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/tests/manual/skinned-mesh/skinnedPbr.vert b/tests/manual/skinned-mesh/skinnedPbr.vert index 6d3a60ef6..94cb3417c 100644 --- a/tests/manual/skinned-mesh/skinnedPbr.vert +++ b/tests/manual/skinned-mesh/skinnedPbr.vert @@ -54,6 +54,8 @@ in vec3 vertexPosition; in vec3 vertexNormal; in vec4 vertexTangent; in vec2 vertexTexCoord; +in ivec4 vertexJointIndices; +in vec4 vertexJointWeights; out vec3 worldPosition; out vec3 worldNormal; @@ -64,16 +66,29 @@ uniform mat4 modelMatrix; uniform mat3 modelNormalMatrix; uniform mat4 mvp; +const int maxJoints = 100; +uniform mat4 skinningPalette[maxJoints]; + void main() { // Pass the texture coordinates through texCoord = vertexTexCoord; + // Perform the skinning + mat4 skinningMatrix = skinningPalette[vertexJointIndices[0]] * vertexJointWeights[0]; + skinningMatrix += skinningPalette[vertexJointIndices[1]] * vertexJointWeights[1]; + skinningMatrix += skinningPalette[vertexJointIndices[2]] * vertexJointWeights[2]; + skinningMatrix += skinningPalette[vertexJointIndices[3]] * vertexJointWeights[3]; + + vec4 skinnedPosition = skinningMatrix * vec4(vertexPosition, 1.0); + vec3 skinnedNormal = vec3(skinningMatrix * vec4(vertexNormal, 0.0)); + vec3 skinnedTangent = vec3(skinningMatrix * vec4(vertexTangent.xyz, 0.0)); + // Transform position, normal, and tangent to world space - worldPosition = vec3(modelMatrix * vec4(vertexPosition, 1.0)); - worldNormal = normalize(modelNormalMatrix * vertexNormal); - worldTangent.xyz = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0))); + worldPosition = vec3(modelMatrix * skinnedPosition); + worldNormal = normalize(modelNormalMatrix * skinnedNormal); + worldTangent.xyz = normalize(vec3(modelMatrix * vec4(skinnedTangent, 0.0))); worldTangent.w = vertexTangent.w; - gl_Position = mvp * vec4(vertexPosition, 1.0); + gl_Position = mvp * skinnedPosition; } |