47 lines
962 B
Plaintext
47 lines
962 B
Plaintext
|
#ifdef USE_SKINNING
|
||
|
|
||
|
uniform mat4 bindMatrix;
|
||
|
uniform mat4 bindMatrixInverse;
|
||
|
|
||
|
#ifdef BONE_TEXTURE
|
||
|
|
||
|
uniform sampler2D boneTexture;
|
||
|
uniform int boneTextureSize;
|
||
|
|
||
|
mat4 getBoneMatrix( const in float i ) {
|
||
|
|
||
|
float j = i * 4.0;
|
||
|
float x = mod( j, float( boneTextureSize ) );
|
||
|
float y = floor( j / float( boneTextureSize ) );
|
||
|
|
||
|
float dx = 1.0 / float( boneTextureSize );
|
||
|
float dy = 1.0 / float( boneTextureSize );
|
||
|
|
||
|
y = dy * ( y + 0.5 );
|
||
|
|
||
|
vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );
|
||
|
vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );
|
||
|
vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );
|
||
|
vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );
|
||
|
|
||
|
mat4 bone = mat4( v1, v2, v3, v4 );
|
||
|
|
||
|
return bone;
|
||
|
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
uniform mat4 boneMatrices[ MAX_BONES ];
|
||
|
|
||
|
mat4 getBoneMatrix( const in float i ) {
|
||
|
|
||
|
mat4 bone = boneMatrices[ int(i) ];
|
||
|
return bone;
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif
|