67 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import { | ||
|  | 	Object3D, | ||
|  | 	Quaternion, | ||
|  | 	Vector3 | ||
|  | } from 'three'; | ||
|  | 
 | ||
|  | const _translationObject = new Vector3(); | ||
|  | const _quaternionObject = new Quaternion(); | ||
|  | const _scaleObject = new Vector3(); | ||
|  | 
 | ||
|  | const _translationWorld = new Vector3(); | ||
|  | const _quaternionWorld = new Quaternion(); | ||
|  | const _scaleWorld = new Vector3(); | ||
|  | 
 | ||
|  | class Gyroscope extends Object3D { | ||
|  | 
 | ||
|  | 	constructor() { | ||
|  | 
 | ||
|  | 		super(); | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	updateMatrixWorld( force ) { | ||
|  | 
 | ||
|  | 		this.matrixAutoUpdate && this.updateMatrix(); | ||
|  | 
 | ||
|  | 		// update matrixWorld
 | ||
|  | 
 | ||
|  | 		if ( this.matrixWorldNeedsUpdate || force ) { | ||
|  | 
 | ||
|  | 			if ( this.parent !== null ) { | ||
|  | 
 | ||
|  | 				this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); | ||
|  | 
 | ||
|  | 				this.matrixWorld.decompose( _translationWorld, _quaternionWorld, _scaleWorld ); | ||
|  | 				this.matrix.decompose( _translationObject, _quaternionObject, _scaleObject ); | ||
|  | 
 | ||
|  | 				this.matrixWorld.compose( _translationWorld, _quaternionObject, _scaleWorld ); | ||
|  | 
 | ||
|  | 
 | ||
|  | 			} else { | ||
|  | 
 | ||
|  | 				this.matrixWorld.copy( this.matrix ); | ||
|  | 
 | ||
|  | 			} | ||
|  | 
 | ||
|  | 
 | ||
|  | 			this.matrixWorldNeedsUpdate = false; | ||
|  | 
 | ||
|  | 			force = true; | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// update children
 | ||
|  | 
 | ||
|  | 		for ( let i = 0, l = this.children.length; i < l; i ++ ) { | ||
|  | 
 | ||
|  | 			this.children[ i ].updateMatrixWorld( force ); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export { Gyroscope }; |