summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-08-04 16:30:26 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-08-10 10:41:23 +0000
commitc74ce04b4f3d25c21ccea6b836d30b4dbda2b6c0 (patch)
tree711c24efd654ae2267b381cc08fc52ff9fafe4d9 /tests
parenta3e323ff404d4b77fabffaa22d19afb09297344d (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.vert23
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;
}