HDRCubeTextureLoader.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. ( function () {
  2. class HDRCubeTextureLoader extends THREE.Loader {
  3. constructor( manager ) {
  4. super( manager );
  5. this.hdrLoader = new THREE.RGBELoader();
  6. this.type = THREE.HalfFloatType;
  7. }
  8. load( urls, onLoad, onProgress, onError ) {
  9. const texture = new THREE.CubeTexture();
  10. texture.type = this.type;
  11. switch ( texture.type ) {
  12. case THREE.FloatType:
  13. texture.encoding = THREE.LinearEncoding;
  14. texture.minFilter = THREE.LinearFilter;
  15. texture.magFilter = THREE.LinearFilter;
  16. texture.generateMipmaps = false;
  17. break;
  18. case THREE.HalfFloatType:
  19. texture.encoding = THREE.LinearEncoding;
  20. texture.minFilter = THREE.LinearFilter;
  21. texture.magFilter = THREE.LinearFilter;
  22. texture.generateMipmaps = false;
  23. break;
  24. }
  25. const scope = this;
  26. let loaded = 0;
  27. function loadHDRData( i, onLoad, onProgress, onError ) {
  28. new THREE.FileLoader( scope.manager ).setPath( scope.path ).setResponseType( 'arraybuffer' ).setWithCredentials( scope.withCredentials ).load( urls[ i ], function ( buffer ) {
  29. loaded ++;
  30. const texData = scope.hdrLoader.parse( buffer );
  31. if ( ! texData ) return;
  32. if ( texData.data !== undefined ) {
  33. const dataTexture = new THREE.DataTexture( texData.data, texData.width, texData.height );
  34. dataTexture.type = texture.type;
  35. dataTexture.encoding = texture.encoding;
  36. dataTexture.format = texture.format;
  37. dataTexture.minFilter = texture.minFilter;
  38. dataTexture.magFilter = texture.magFilter;
  39. dataTexture.generateMipmaps = texture.generateMipmaps;
  40. texture.images[ i ] = dataTexture;
  41. }
  42. if ( loaded === 6 ) {
  43. texture.needsUpdate = true;
  44. if ( onLoad ) onLoad( texture );
  45. }
  46. }, onProgress, onError );
  47. }
  48. for ( let i = 0; i < urls.length; i ++ ) {
  49. loadHDRData( i, onLoad, onProgress, onError );
  50. }
  51. return texture;
  52. }
  53. setDataType( value ) {
  54. this.type = value;
  55. this.hdrLoader.setDataType( value );
  56. return this;
  57. }
  58. }
  59. THREE.HDRCubeTextureLoader = HDRCubeTextureLoader;
  60. } )();