From 8acb4a0aad7f4d1b2438010d487489a9641e30cb Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Sat, 23 Mar 2024 19:05:26 -0300 Subject: fixt Make skeletal mesh work properly --- glsl/shader_3d_skeletal.vert.glsl | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'glsl') diff --git a/glsl/shader_3d_skeletal.vert.glsl b/glsl/shader_3d_skeletal.vert.glsl index 169e1af..c078db9 100644 --- a/glsl/shader_3d_skeletal.vert.glsl +++ b/glsl/shader_3d_skeletal.vert.glsl @@ -55,16 +55,24 @@ main() { vec4 position = vec4(0.0f); vec3 normal = in_normal; - for(int i = 0; i < MAX_NUM_OF_INFLUENCING_BONES; i++) - { - if(in_bone_weights[i] == 0.0) - break; + if(in_bone_weights[0] == 0.0) + { + position = vec4(in_position, 1.0); + normal = mat3(ubo_skeletal_model.base_matrix) * in_normal; + } + else + { + for(int i = 0; i < MAX_NUM_OF_INFLUENCING_BONES; i++) + { + if(in_bone_weights[i] == 0.0) break; - vec4 local_position = ubo_skeletal_model.bone_matrices[in_bone_ids[i]] * - vec4(in_position, 1.0f); - position += local_position * in_bone_weights[i]; - normal = mat3(ubo_skeletal_model.bone_matrices[in_bone_ids[i]]) * normal; - } + vec4 local_position = + ubo_skeletal_model.bone_matrices[in_bone_ids[i]] * + vec4(in_position, 1.0f); + position += local_position * in_bone_weights[i]; + normal = mat3(ubo_skeletal_model.bone_matrices[in_bone_ids[i]]) * normal; + } + } mat4 view_model = ubo_view.view * ubo_skeletal_model.base_matrix; gl_Position = ubo_view.proj * view_model * position; -- cgit v1.2.3