[page:Object3D] →

# [name]

A mesh that has a [page:Skeleton] with [page:Bone bones] that can then be used to animate the vertices of the geometry.

## Example

`var geometry = new THREE.CylinderGeometry( 5, 5, 5, 5, 15, 5, 30 ); //Create the skin indices and skin weights for ( var i = 0; i < geometry.vertices.length; i ++ ) { // Imaginary functions to calculate the indices and weights // This part will need to be changed depending your skeleton and model var skinIndex = calculateSkinIndex( geometry.vertices, i ); var skinWeight = calculateSkinWeight( geometry.vertices, i ); // Ease between each bone geometry.skinIndices.push( new THREE.Vector4( skinIndex, skinIndex + 1, 0, 0 ) ); geometry.skinWeights.push( new THREE.Vector4( 1 - skinWeight, skinWeight, 0, 0 ) ); } var mesh = THREE.SkinnedMesh( geometry, material ); // See example from THREE.Skeleton for the armSkeleton var rootBone = armSkeleton.bones[ 0 ]; mesh.add( rootBone ); // Bind the skeleton to the mesh mesh.bind( armSkeleton ); // Move the bones and manipulate the model armSkeleton.bones[ 0 ].rotation.x = -0.1; armSkeleton.bones[ 1 ].rotation.x = 0.2;`

## Constructor

### [name]( [page:Geometry geometry], [page:Material material], [page:boolean useVertexTexture] )

geometry — An instance of [page:Geometry]. [page:Geometry.skinIndices] and [page:Geometry.skinWeights] should be set.
material — An instance of [page:Material] (optional).
useVertexTexture -- Defines whether a vertex texture can be used (optional).

## Properties

### [property:array bones]

This contains the array of bones for this mesh. These should be set in the constructor.

### [property:Matrix4 identityMatrix]

This is an identityMatrix to calculate the bones matrices from.

### [property:boolean useVertexTexture]

The boolean defines whether a vertex texture is used to calculate the bones. This boolean shouldn't be changed after constructor.

### [property:array boneMatrices]

This array of matrices contains the matrices of the bones. These get calculated in the constructor.

### [property:string bindMode]

Either "attached" or "detached". "attached" uses the [page:SkinnedMesh.matrixWorld] property for the base transform matrix of the bones. "detached" uses the [page:SkinnedMesh.bindMatrix].

### [property:Matrix4 bindMatrix]

The base matrix that is used for the bound bone transforms.

### [property:Matrix4 inverseBindMatrix]

The inverse of the bindMatrix.

## Methods

### [method:null bind]( [page:Skeleton skeleton], [page:Matrix4 bindMatrix] )

skeleton — [page:Skeleton]
bindMatrix — [page:Matrix4] that represents the base transform of the skeleton
Bind a skeleton to the skinned mesh. The bindMatrix gets saved to .bindMatrix property and the .bindMatrixInverse gets calculated.

### [method:null normalizeSkinWeights]()

Normalizes the [page:Geometry.skinWeights] vectors. Does not affect [page:BufferGeometry].

### [method:null pose]()

This method sets the skinned mesh in the rest pose.

### [method:Bone addBone]( [page:Bone bone] )

bone — This is the bone that needs to be added. (optional)
This method adds the bone to the skinned mesh when it is provided. It creates a new bone and adds that when no bone is given.

### [method:SkinnedMesh clone]()

Returns a clone of this SkinnedMesh object and its descendants.

## Source

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]