添加关照、全局等高线、修改图层问题
This commit is contained in:
		
							
								
								
									
										115
									
								
								static/sdk/three/jsm/loaders/HDRCubeTextureLoader.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								static/sdk/three/jsm/loaders/HDRCubeTextureLoader.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| import { | ||||
| 	CubeTexture, | ||||
| 	DataTexture, | ||||
| 	FileLoader, | ||||
| 	FloatType, | ||||
| 	HalfFloatType, | ||||
| 	LinearFilter, | ||||
| 	LinearSRGBColorSpace, | ||||
| 	Loader | ||||
| } from 'three'; | ||||
| import { RGBELoader } from '../loaders/RGBELoader.js'; | ||||
|  | ||||
| class HDRCubeTextureLoader extends Loader { | ||||
|  | ||||
| 	constructor( manager ) { | ||||
|  | ||||
| 		super( manager ); | ||||
|  | ||||
| 		this.hdrLoader = new RGBELoader(); | ||||
| 		this.type = HalfFloatType; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	load( urls, onLoad, onProgress, onError ) { | ||||
|  | ||||
| 		const texture = new CubeTexture(); | ||||
|  | ||||
| 		texture.type = this.type; | ||||
|  | ||||
| 		switch ( texture.type ) { | ||||
|  | ||||
| 			case FloatType: | ||||
|  | ||||
| 				texture.colorSpace = LinearSRGBColorSpace; | ||||
| 				texture.minFilter = LinearFilter; | ||||
| 				texture.magFilter = LinearFilter; | ||||
| 				texture.generateMipmaps = false; | ||||
| 				break; | ||||
|  | ||||
| 			case HalfFloatType: | ||||
|  | ||||
| 				texture.colorSpace = LinearSRGBColorSpace; | ||||
| 				texture.minFilter = LinearFilter; | ||||
| 				texture.magFilter = LinearFilter; | ||||
| 				texture.generateMipmaps = false; | ||||
| 				break; | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		const scope = this; | ||||
|  | ||||
| 		let loaded = 0; | ||||
|  | ||||
| 		function loadHDRData( i, onLoad, onProgress, onError ) { | ||||
|  | ||||
| 			new FileLoader( scope.manager ) | ||||
| 				.setPath( scope.path ) | ||||
| 				.setResponseType( 'arraybuffer' ) | ||||
| 				.setWithCredentials( scope.withCredentials ) | ||||
| 				.load( urls[ i ], function ( buffer ) { | ||||
|  | ||||
| 					loaded ++; | ||||
|  | ||||
| 					const texData = scope.hdrLoader.parse( buffer ); | ||||
|  | ||||
| 					if ( ! texData ) return; | ||||
|  | ||||
| 					if ( texData.data !== undefined ) { | ||||
|  | ||||
| 						const dataTexture = new DataTexture( texData.data, texData.width, texData.height ); | ||||
|  | ||||
| 						dataTexture.type = texture.type; | ||||
| 						dataTexture.colorSpace = texture.colorSpace; | ||||
| 						dataTexture.format = texture.format; | ||||
| 						dataTexture.minFilter = texture.minFilter; | ||||
| 						dataTexture.magFilter = texture.magFilter; | ||||
| 						dataTexture.generateMipmaps = texture.generateMipmaps; | ||||
|  | ||||
| 						texture.images[ i ] = dataTexture; | ||||
|  | ||||
| 					} | ||||
|  | ||||
| 					if ( loaded === 6 ) { | ||||
|  | ||||
| 						texture.needsUpdate = true; | ||||
| 						if ( onLoad ) onLoad( texture ); | ||||
|  | ||||
| 					} | ||||
|  | ||||
| 				}, onProgress, onError ); | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		for ( let i = 0; i < urls.length; i ++ ) { | ||||
|  | ||||
| 			loadHDRData( i, onLoad, onProgress, onError ); | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		return texture; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	setDataType( value ) { | ||||
|  | ||||
| 		this.type = value; | ||||
| 		this.hdrLoader.setDataType( value ); | ||||
|  | ||||
| 		return this; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| export { HDRCubeTextureLoader }; | ||||
		Reference in New Issue
	
	Block a user