Skip to content

Commit 1cb5621

Browse files
author
Avaer Kazmer
committed
Add decapitate/undecapitate support
1 parent 333de8a commit 1cb5621

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

vrarmik.html

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -613,13 +613,13 @@ <h3>Multiplayer</h3>
613613

614614
mesh.onBeforeRender2 = () => {
615615
if (rig) {
616-
_loadSavedHead();
616+
rig.undecapitate();
617617
// meshDolly.visible = true;
618618
}
619619
};
620620
mesh.onAfterRender2 = () => {
621621
if (rig) {
622-
_unloadSavedHead();
622+
rig.decapitate();
623623
// meshDolly.visible = false;
624624
}
625625
};
@@ -648,12 +648,9 @@ <h3>Multiplayer</h3>
648648
fingers: true,
649649
hair: true,
650650
visemes: true,
651+
decapitate: true,
651652
microphoneMediaStream,
652653
});
653-
rig.modelBones.Head.traverse(o => {
654-
o.savedPosition = new THREE.Vector3();
655-
o.savedMatrixWorld = new THREE.Matrix4();
656-
});
657654
meshDolly.add(model);
658655
window.model = model;
659656

@@ -887,15 +884,7 @@ <h3>Multiplayer</h3>
887884
}
888885
}
889886

890-
if (rig) {
891-
_unloadSavedHead();
892-
}
893-
894887
renderer.render(scene, camera);
895-
896-
if (rig) {
897-
_loadSavedHead();
898-
}
899888
}
900889
renderer.setAnimationLoop(animate);
901890

vrarmik/avatars.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,14 @@ class Avatar {
405405
armature.scale.set(1, 1, 1).divideScalar(this.armatureScaleFactor);
406406
armature.updateMatrix();
407407

408+
Head.traverse(o => {
409+
o.savedPosition = new THREE.Vector3();
410+
o.savedMatrixWorld = new THREE.Matrix4();
411+
});
412+
if (options.decapitate) {
413+
this.decapitate();
414+
}
415+
408416
const hairBones = tailBones.filter(bone => /hair/i.test(bone.name)).map(bone => {
409417
for (; bone; bone = bone.parent) {
410418
if (bone.parent === Head) {
@@ -902,5 +910,20 @@ class Avatar {
902910
mediaStreamSource.connect(audioWorkletNode).connect(this.audioContext.destination);
903911
}
904912
}
913+
914+
decapitate() {
915+
rig.modelBones.Head.traverse(o => {
916+
o.savedPosition.copy(o.position);
917+
o.savedMatrixWorld.copy(o.matrixWorld);
918+
o.position.set(NaN, NaN, NaN);
919+
o.matrixWorld.set(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN);
920+
});
921+
}
922+
undecapitate() {
923+
rig.modelBones.Head.traverse(o => {
924+
o.position.copy(o.savedPosition);
925+
o.matrixWorld.copy(o.savedMatrixWorld);
926+
});
927+
}
905928
}
906929
export default Avatar;

0 commit comments

Comments
 (0)