summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authoromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-08-13 22:13:29 +1000
committeromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-08-13 22:13:29 +1000
commitd4df846c97a7fd216748806abdb729a11a0ce2ec (patch)
treec466b49a356904842f7fb5b7df7c43adfa1b91d7 /assets
parent567d384b698151e287e31140709c93f1b92e6db4 (diff)
go
Diffstat (limited to 'assets')
-rw-r--r--assets/shaders/pbr_textured.frag2
-rw-r--r--assets/shaders/skinned_geometry.vert37
2 files changed, 29 insertions, 10 deletions
diff --git a/assets/shaders/pbr_textured.frag b/assets/shaders/pbr_textured.frag
index d1c725c..0c801f8 100644
--- a/assets/shaders/pbr_textured.frag
+++ b/assets/shaders/pbr_textured.frag
@@ -112,7 +112,7 @@ void main() {
color = color / (color + vec3(1.0));
color = pow(color, vec3(1.0 / 2.2));
- // FragColor = vec4(color, 1.0);
+ FragColor = vec4(color, 1.0);
FragColor = vec4(1.0);
// FragColor = vec4(scene.pointLights[0].position);
// FragColor = vec4(albedo, 1.0);
diff --git a/assets/shaders/skinned_geometry.vert b/assets/shaders/skinned_geometry.vert
index 2021691..a610442 100644
--- a/assets/shaders/skinned_geometry.vert
+++ b/assets/shaders/skinned_geometry.vert
@@ -4,15 +4,24 @@
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inNormal;
layout(location = 2) in vec2 inTexCoords;
+layout(location = 3) in ivec4 inBoneIndices;
+layout(location = 4) in vec4 inWeights;
+
+const int MAX_BONES = 100;
+const int MAX_BONE_INFLUENCES = 4;
+
+uniform AnimData {
+ mat4 boneMatrices[MAX_BONES];
+} anim;
uniform Camera {
- mat4 view;
- mat4 proj;
- vec4 viewPos;
+ mat4 view;
+ mat4 proj;
+ vec4 viewPos;
} cam;
uniform Model {
- mat4 inner;
+ mat4 inner;
} model;
// Outputs
@@ -21,13 +30,23 @@ layout(location = 1) out vec3 fragNormal;
layout(location = 2) out vec2 fragTexCoords;
out vec4 viewPos;
+// out vec4 dbgcolor;
void main() {
- fragWorldPos = vec3(model.inner * vec4(inPosition, 1.0));
- fragNormal = mat3(transpose(inverse(model.inner))) * inNormal; // world-space normal
- fragTexCoords = inTexCoords;
+ mat4 skinMatrix =
+ inWeights.x * anim.boneMatrices[int(inBoneIndices.x)] +
+ inWeights.y * anim.boneMatrices[int(inBoneIndices.y)] +
+ inWeights.z * anim.boneMatrices[int(inBoneIndices.z)] +
+ inWeights.w * anim.boneMatrices[int(inBoneIndices.w)];
+
+ vec4 totalPosition = skinMatrix * vec4(inPosition, 1.0);
+
+ fragWorldPos = vec3(model.inner * totalPosition);
+ fragNormal = mat3(transpose(inverse(model.inner))) * inNormal; // world-space normal
+ fragTexCoords = inTexCoords;
- viewPos = cam.viewPos;
+ viewPos = cam.viewPos;
- gl_Position = cam.proj * cam.view * model.inner * vec4(inPosition, 1.0);
+ gl_Position = cam.proj * cam.view * model.inner * vec4(inPosition, 1.0);
+ // gl_Position = cam.proj * cam.view * model.inner * totalPosition;
}