Dies ist das Repository meines kleinen Portfolios.
Im Hintergrund läuft eine Planetensimulation, geschrieben in JavaScript und Three.js.
Die zu sehenden Texturen stammen von:
https://www.solarsystemscope.com/textures/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
1.7 KiB
102 lines
1.7 KiB
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() { |
|
|
|
this.path = null; |
|
|
|
} |
|
|
|
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 ); |
|
|
|
} |
|
|
|
} |
|
|
|
} ); |
|
|
|
controller.addEventListener( 'disconnected', () => { |
|
|
|
// handModel.motionController = null; |
|
// handModel.remove( scene ); |
|
// scene = null; |
|
|
|
} ); |
|
|
|
return handModel; |
|
|
|
} |
|
|
|
} |
|
|
|
export { XRHandModelFactory };
|
|
|