添加关照、全局等高线、修改图层问题
This commit is contained in:
		
							
								
								
									
										107
									
								
								static/sdk/three/jsm/webxr/XRHandModelFactory.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								static/sdk/three/jsm/webxr/XRHandModelFactory.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,107 @@ | ||||
| import { | ||||
| 	Object3D | ||||
| } from 'three'; | ||||
|  | ||||
| import { | ||||
| 	XRHandPrimitiveModel | ||||
| } from './XRHandPrimitiveModel.js'; | ||||
|  | ||||
| import { | ||||
| 	XRHandMeshModel | ||||
| } from './XRHandMeshModel.js'; | ||||
|  | ||||
| class XRHandModel extends Object3D { | ||||
|  | ||||
| 	constructor( controller ) { | ||||
|  | ||||
| 		super(); | ||||
|  | ||||
| 		this.controller = controller; | ||||
| 		this.motionController = null; | ||||
| 		this.envMap = null; | ||||
|  | ||||
| 		this.mesh = null; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	updateMatrixWorld( force ) { | ||||
|  | ||||
| 		super.updateMatrixWorld( force ); | ||||
|  | ||||
| 		if ( this.motionController ) { | ||||
|  | ||||
| 			this.motionController.updateMesh(); | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| class XRHandModelFactory { | ||||
|  | ||||
| 	constructor( gltfLoader = null, onLoad = null ) { | ||||
|  | ||||
| 		this.gltfLoader = gltfLoader; | ||||
| 		this.path = null; | ||||
| 		this.onLoad = onLoad; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	setPath( path ) { | ||||
|  | ||||
| 		this.path = path; | ||||
|  | ||||
| 		return this; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	createHandModel( controller, profile ) { | ||||
|  | ||||
| 		const handModel = new XRHandModel( controller ); | ||||
|  | ||||
| 		controller.addEventListener( 'connected', ( event ) => { | ||||
|  | ||||
| 			const xrInputSource = event.data; | ||||
|  | ||||
| 			if ( xrInputSource.hand && ! handModel.motionController ) { | ||||
|  | ||||
| 				handModel.xrInputSource = xrInputSource; | ||||
|  | ||||
| 				// @todo Detect profile if not provided | ||||
| 				if ( profile === undefined || profile === 'spheres' ) { | ||||
|  | ||||
| 					handModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } ); | ||||
|  | ||||
| 				} else if ( profile === 'boxes' ) { | ||||
|  | ||||
| 					handModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } ); | ||||
|  | ||||
| 				} else if ( profile === 'mesh' ) { | ||||
|  | ||||
| 					handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad ); | ||||
|  | ||||
| 				} | ||||
|  | ||||
| 			} | ||||
|  | ||||
| 			controller.visible = true; | ||||
|  | ||||
| 		} ); | ||||
|  | ||||
| 		controller.addEventListener( 'disconnected', () => { | ||||
|  | ||||
| 			controller.visible = false; | ||||
| 			// handModel.motionController = null; | ||||
| 			// handModel.remove( scene ); | ||||
| 			// scene = null; | ||||
|  | ||||
| 		} ); | ||||
|  | ||||
| 		return handModel; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| export { XRHandModelFactory }; | ||||
		Reference in New Issue
	
	Block a user