修改静态资源文件夹位置
This commit is contained in:
103
public/sdk/three/jsm/webxr/XRHandPrimitiveModel.js
Normal file
103
public/sdk/three/jsm/webxr/XRHandPrimitiveModel.js
Normal file
@ -0,0 +1,103 @@
|
||||
import {
|
||||
DynamicDrawUsage,
|
||||
SphereGeometry,
|
||||
BoxGeometry,
|
||||
MeshStandardMaterial,
|
||||
InstancedMesh,
|
||||
Matrix4,
|
||||
Vector3
|
||||
} from 'three';
|
||||
|
||||
const _matrix = new Matrix4();
|
||||
const _vector = new Vector3();
|
||||
|
||||
class XRHandPrimitiveModel {
|
||||
|
||||
constructor( handModel, controller, path, handedness, options ) {
|
||||
|
||||
this.controller = controller;
|
||||
this.handModel = handModel;
|
||||
this.envMap = null;
|
||||
|
||||
let geometry;
|
||||
|
||||
if ( ! options || ! options.primitive || options.primitive === 'sphere' ) {
|
||||
|
||||
geometry = new SphereGeometry( 1, 10, 10 );
|
||||
|
||||
} else if ( options.primitive === 'box' ) {
|
||||
|
||||
geometry = new BoxGeometry( 1, 1, 1 );
|
||||
|
||||
}
|
||||
|
||||
const material = new MeshStandardMaterial();
|
||||
|
||||
this.handMesh = new InstancedMesh( geometry, material, 30 );
|
||||
this.handMesh.frustumCulled = false;
|
||||
this.handMesh.instanceMatrix.setUsage( DynamicDrawUsage ); // will be updated every frame
|
||||
this.handMesh.castShadow = true;
|
||||
this.handMesh.receiveShadow = true;
|
||||
this.handModel.add( this.handMesh );
|
||||
|
||||
this.joints = [
|
||||
'wrist',
|
||||
'thumb-metacarpal',
|
||||
'thumb-phalanx-proximal',
|
||||
'thumb-phalanx-distal',
|
||||
'thumb-tip',
|
||||
'index-finger-metacarpal',
|
||||
'index-finger-phalanx-proximal',
|
||||
'index-finger-phalanx-intermediate',
|
||||
'index-finger-phalanx-distal',
|
||||
'index-finger-tip',
|
||||
'middle-finger-metacarpal',
|
||||
'middle-finger-phalanx-proximal',
|
||||
'middle-finger-phalanx-intermediate',
|
||||
'middle-finger-phalanx-distal',
|
||||
'middle-finger-tip',
|
||||
'ring-finger-metacarpal',
|
||||
'ring-finger-phalanx-proximal',
|
||||
'ring-finger-phalanx-intermediate',
|
||||
'ring-finger-phalanx-distal',
|
||||
'ring-finger-tip',
|
||||
'pinky-finger-metacarpal',
|
||||
'pinky-finger-phalanx-proximal',
|
||||
'pinky-finger-phalanx-intermediate',
|
||||
'pinky-finger-phalanx-distal',
|
||||
'pinky-finger-tip'
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
updateMesh() {
|
||||
|
||||
const defaultRadius = 0.008;
|
||||
const joints = this.controller.joints;
|
||||
|
||||
let count = 0;
|
||||
|
||||
for ( let i = 0; i < this.joints.length; i ++ ) {
|
||||
|
||||
const joint = joints[ this.joints[ i ] ];
|
||||
|
||||
if ( joint.visible ) {
|
||||
|
||||
_vector.setScalar( joint.jointRadius || defaultRadius );
|
||||
_matrix.compose( joint.position, joint.quaternion, _vector );
|
||||
this.handMesh.setMatrixAt( i, _matrix );
|
||||
|
||||
count ++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.handMesh.count = count;
|
||||
this.handMesh.instanceMatrix.needsUpdate = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export { XRHandPrimitiveModel };
|
Reference in New Issue
Block a user