three.js SkinnedMesh

2023-02-16 17:47 更新

具有Skeleton(骨架)和bones(骨骼)的網(wǎng)格,可用于給幾何體上的頂點(diǎn)添加動(dòng)畫(huà)。

SkinnedMesh 只能與 WebGL 2 一起使用。對(duì)于 WebGL 1,需要 OES_texture_float 和頂點(diǎn)紋理支持。

示例

代碼示例

const geometry = new THREE.CylinderGeometry( 5, 5, 5, 5, 15, 5, 30 );

// create the skin indices and skin weights

const position = geometry.attributes.position;

const vertex = new THREE.Vector3();

const skinIndices = [];
const skinWeights = [];

for ( let i = 0; i < position.count; i ++ ) {

	vertex.fromBufferAttribute( position, i );

	// compute skinIndex and skinWeight based on some configuration data

	const y = ( vertex.y + sizing.halfHeight );

	const skinIndex = Math.floor( y / sizing.segmentHeight );
	const skinWeight = ( y % sizing.segmentHeight ) / sizing.segmentHeight;

	skinIndices.push( skinIndex, skinIndex + 1, 0, 0 );
	skinWeights.push( 1 - skinWeight, skinWeight, 0, 0 );

}

geometry.setAttribute( 'skinIndex', new THREE.Uint16BufferAttribute( skinIndices, 4 ) );
geometry.setAttribute( 'skinWeight', new THREE.Float32BufferAttribute( skinWeights, 4 ) );

// create skinned mesh and skeleton

const mesh = new THREE.SkinnedMesh( geometry, material );
const skeleton = new THREE.Skeleton( bones );

// see example from THREE.Skeleton

const rootBone = skeleton.bones[ 0 ];
mesh.add( rootBone );

// bind the skeleton to the mesh

mesh.bind( skeleton );

// move the bones and manipulate the model

skeleton.bones[ 0 ].rotation.x = -0.1;
skeleton.bones[ 1 ].rotation.x = 0.2;

構(gòu)造器

SkinnedMesh( geometry : BufferGeometry, material : Material )

geometry —— 一個(gè)BufferGeometry實(shí)例。
material —— (可選)一個(gè)Material實(shí)例,默認(rèn)值是一個(gè)新的MeshBasicMaterial。

屬性

共有屬性請(qǐng)參見(jiàn)其基類(lèi)Mesh。

.bindMode : String

“attached”(附加)或者“detached”(分離)?!癮ttached”使用SkinnedMesh.matrixWorld 屬性作為對(duì)骨骼的基本變換矩陣,“detached”則使用SkinnedMesh.bindMatrix。 默認(rèn)值是“attached”。

.bindMatrix : Matrix4

該基礎(chǔ)矩陣用于綁定骨骼的變換。

.bindMatrixInverse : Matrix4

該基礎(chǔ)矩陣用于重置綁定骨骼的變換。

.isSkinnedMesh : Boolean

只讀標(biāo)志,用于檢查給定對(duì)象是否屬于 SkinnedMesh 類(lèi)型。

.skeleton : Skeleton

用于表示蒙皮網(wǎng)格中骨骼的層次結(jié)構(gòu)的Skeleton(骨架)。

方法

共有方法請(qǐng)參見(jiàn)其基類(lèi)Mesh。

.bind ( skeleton : Skeleton, bindMatrix : Matrix4 ) : undefined

skeleton —— 由一棵Bones樹(shù)創(chuàng)建的Skeleton。
bindMatrix —— 表示骨架基本變換的Matrix4(4x4矩陣)。

將骨架綁定到一個(gè)蒙皮網(wǎng)格上。bindMatrix會(huì)被保存到.bindMatrix屬性中,其逆矩陣.bindMatrixInverse也會(huì)被計(jì)算出來(lái)。

.clone () : SkinnedMesh

此方法當(dāng)前無(wú)法正確克隆 SkinnedMesh 的實(shí)例。請(qǐng)同時(shí)使用 SkeletonUtils.clone()。

.normalizeSkinWeights () : undefined

標(biāo)準(zhǔn)化蒙皮的權(quán)重。

.pose () : undefined

這個(gè)方法設(shè)置了在“休息”狀態(tài)下蒙皮網(wǎng)格的姿勢(shì)(重置姿勢(shì))。

源代碼

src/objects/SkinnedMesh.js


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)