mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 22:34:53 +08:00
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
module spine.threejs {
|
|
export class SkeletonMesh extends THREE.Mesh {
|
|
|
|
skeleton: Skeleton;
|
|
state: AnimationState;
|
|
|
|
private _vertexBuffer: THREE.InterleavedBuffer;
|
|
|
|
constructor (skeletonData: SkeletonData) {
|
|
super();
|
|
|
|
this.skeleton = new Skeleton(skeletonData);
|
|
let animData = new AnimationStateData(skeletonData);
|
|
this.state = new AnimationState(animData);
|
|
|
|
this.material = new THREE.MeshBasicMaterial();
|
|
this.material.vertexColors = THREE.VertexColors;
|
|
|
|
let geometry: THREE.BufferGeometry = this.geometry = new THREE.BufferGeometry();
|
|
let vertexBuffer = this._vertexBuffer = new THREE.InterleavedBuffer(new Float32Array(8 * 3 * 10920), 8);
|
|
vertexBuffer.setDynamic(true);
|
|
geometry.addAttribute("position", new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 0, false));
|
|
geometry.addAttribute("color", new THREE.InterleavedBufferAttribute(vertexBuffer, 4, 2, false));
|
|
geometry.addAttribute("uv", new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 6, false));
|
|
|
|
let indexBuffer = new Uint16Array(3 * 10920);
|
|
geometry.setIndex(new THREE.BufferAttribute(indexBuffer, 1));
|
|
geometry.getIndex().dynamic = true;
|
|
this.update(0);
|
|
}
|
|
|
|
update(deltaTime: number) {
|
|
let state = this.state;
|
|
let skeleton = this.skeleton;
|
|
|
|
state.update(deltaTime);
|
|
state.apply(skeleton);
|
|
skeleton.updateWorldTransform();
|
|
|
|
this.updateGeometry();
|
|
}
|
|
|
|
private updateGeometry() {
|
|
let geometry = <THREE.BufferGeometry>this.geometry;
|
|
geometry.drawRange.start = 0;
|
|
geometry.drawRange.count = 0;
|
|
this._vertexBuffer.needsUpdate = true;
|
|
geometry.getIndex().needsUpdate = true;
|
|
}
|
|
}
|
|
} |