34 lines
979 B
GLSL
34 lines
979 B
GLSL
#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 );
|
|
} |