2
0

HDRCubeTextureLoader.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import {
  2. CubeTexture,
  3. DataTexture,
  4. FileLoader,
  5. FloatType,
  6. HalfFloatType,
  7. LinearEncoding,
  8. LinearFilter,
  9. Loader,
  10. NearestFilter,
  11. RGBAFormat,
  12. RGBEEncoding,
  13. RGBFormat,
  14. UnsignedByteType
  15. } from '../../../build/three.module.js';
  16. import { RGBELoader } from '../loaders/RGBELoader.js';
  17. var HDRCubeTextureLoader = function ( manager ) {
  18. Loader.call( this, manager );
  19. this.hdrLoader = new RGBELoader();
  20. this.type = UnsignedByteType;
  21. };
  22. HDRCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
  23. constructor: HDRCubeTextureLoader,
  24. load: function ( urls, onLoad, onProgress, onError ) {
  25. if ( ! Array.isArray( urls ) ) {
  26. console.warn( 'THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.' );
  27. this.setDataType( urls );
  28. urls = onLoad;
  29. onLoad = onProgress;
  30. onProgress = onError;
  31. onError = arguments[ 4 ];
  32. }
  33. var texture = new CubeTexture();
  34. texture.type = this.type;
  35. switch ( texture.type ) {
  36. case UnsignedByteType:
  37. texture.encoding = RGBEEncoding;
  38. texture.format = RGBAFormat;
  39. texture.minFilter = NearestFilter;
  40. texture.magFilter = NearestFilter;
  41. texture.generateMipmaps = false;
  42. break;
  43. case FloatType:
  44. texture.encoding = LinearEncoding;
  45. texture.format = RGBFormat;
  46. texture.minFilter = LinearFilter;
  47. texture.magFilter = LinearFilter;
  48. texture.generateMipmaps = false;
  49. break;
  50. case HalfFloatType:
  51. texture.encoding = LinearEncoding;
  52. texture.format = RGBFormat;
  53. texture.minFilter = LinearFilter;
  54. texture.magFilter = LinearFilter;
  55. texture.generateMipmaps = false;
  56. break;
  57. }
  58. var scope = this;
  59. var loaded = 0;
  60. function loadHDRData( i, onLoad, onProgress, onError ) {
  61. new FileLoader( scope.manager )
  62. .setPath( scope.path )
  63. .setResponseType( 'arraybuffer' )
  64. .setWithCredentials( scope.withCredentials )
  65. .load( urls[ i ], function ( buffer ) {
  66. loaded ++;
  67. var texData = scope.hdrLoader.parse( buffer );
  68. if ( ! texData ) return;
  69. if ( texData.data !== undefined ) {
  70. var dataTexture = new DataTexture( texData.data, texData.width, texData.height );
  71. dataTexture.type = texture.type;
  72. dataTexture.encoding = texture.encoding;
  73. dataTexture.format = texture.format;
  74. dataTexture.minFilter = texture.minFilter;
  75. dataTexture.magFilter = texture.magFilter;
  76. dataTexture.generateMipmaps = texture.generateMipmaps;
  77. texture.images[ i ] = dataTexture;
  78. }
  79. if ( loaded === 6 ) {
  80. texture.needsUpdate = true;
  81. if ( onLoad ) onLoad( texture );
  82. }
  83. }, onProgress, onError );
  84. }
  85. for ( var i = 0; i < urls.length; i ++ ) {
  86. loadHDRData( i, onLoad, onProgress, onError );
  87. }
  88. return texture;
  89. },
  90. setDataType: function ( value ) {
  91. this.type = value;
  92. this.hdrLoader.setDataType( value );
  93. return this;
  94. }
  95. } );
  96. export { HDRCubeTextureLoader };