#version 120 attribute vec3 a_position; attribute vec3 a_normal; attribute vec2 a_texcoord; attribute vec4 a_boneIds; attribute vec4 a_weights; varying vec3 v_position; varying vec3 v_normal; varying vec2 v_texcoord; varying vec3 v_finalColor; uniform mat4 u_modelMatrix; uniform mat4 u_viewMatrix; uniform mat4 u_projectionMatrix; uniform mat4 u_modelViewProjection; uniform mat4 u_boneMatrices[128]; void main() { // calculate bone transform mat4 skinMatrix = a_weights.x * u_boneMatrices[ int( a_boneIds.x ) ] + a_weights.y * u_boneMatrices[ int( a_boneIds.y ) ] + a_weights.z * u_boneMatrices[ int( a_boneIds.z ) ] + a_weights.w * u_boneMatrices[ int( a_boneIds.w ) ]; // Position v_position = vec3( skinMatrix * vec4( a_position, 1.0 ) ); v_position = vec3( u_modelMatrix * vec4( v_position, 1.0 ) ); v_normal = vec3( mat3(u_modelMatrix) * a_normal ); v_texcoord = a_texcoord; gl_Position = u_projectionMatrix * u_viewMatrix * vec4( v_position, 1.0 ); }