HDRCubeTextureLoader.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. console.warn( "THREE.HDRCubeTextureLoader: As part of the transition to ES6 Modules, the files in 'examples/js' were deprecated in May 2020 (r117) and will be deleted in December 2020 (r124). You can find more information about developing using ES6 Modules in https://threejs.org/docs/index.html#manual/en/introduction/Import-via-modules." );
  2. /**
  3. * @author Prashant Sharma / spidersharma03
  4. * @author Ben Houston / http://clara.io / bhouston
  5. */
  6. THREE.HDRCubeTextureLoader = function ( manager ) {
  7. THREE.Loader.call( this, manager );
  8. this.hdrLoader = new THREE.RGBELoader();
  9. this.type = THREE.UnsignedByteType;
  10. };
  11. THREE.HDRCubeTextureLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype ), {
  12. constructor: THREE.HDRCubeTextureLoader,
  13. load: function ( urls, onLoad, onProgress, onError ) {
  14. if ( ! Array.isArray( urls ) ) {
  15. console.warn( 'THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.' );
  16. this.setDataType( urls );
  17. urls = onLoad;
  18. onLoad = onProgress;
  19. onProgress = onError;
  20. onError = arguments[ 4 ];
  21. }
  22. var texture = new THREE.CubeTexture();
  23. texture.type = this.type;
  24. switch ( texture.type ) {
  25. case THREE.UnsignedByteType:
  26. texture.encoding = THREE.RGBEEncoding;
  27. texture.format = THREE.RGBAFormat;
  28. texture.minFilter = THREE.NearestFilter;
  29. texture.magFilter = THREE.NearestFilter;
  30. texture.generateMipmaps = false;
  31. break;
  32. case THREE.FloatType:
  33. texture.encoding = THREE.LinearEncoding;
  34. texture.format = THREE.RGBFormat;
  35. texture.minFilter = THREE.LinearFilter;
  36. texture.magFilter = THREE.LinearFilter;
  37. texture.generateMipmaps = false;
  38. break;
  39. case THREE.HalfFloatType:
  40. texture.encoding = THREE.LinearEncoding;
  41. texture.format = THREE.RGBFormat;
  42. texture.minFilter = THREE.LinearFilter;
  43. texture.magFilter = THREE.LinearFilter;
  44. texture.generateMipmaps = false;
  45. break;
  46. }
  47. var scope = this;
  48. var loaded = 0;
  49. function loadHDRData( i, onLoad, onProgress, onError ) {
  50. new THREE.FileLoader( scope.manager )
  51. .setPath( scope.path )
  52. .setResponseType( 'arraybuffer' )
  53. .load( urls[ i ], function ( buffer ) {
  54. loaded ++;
  55. var texData = scope.hdrLoader.parse( buffer );
  56. if ( ! texData ) return;
  57. if ( texData.data !== undefined ) {
  58. var dataTexture = new THREE.DataTexture( texData.data, texData.width, texData.height );
  59. dataTexture.type = texture.type;
  60. dataTexture.encoding = texture.encoding;
  61. dataTexture.format = texture.format;
  62. dataTexture.minFilter = texture.minFilter;
  63. dataTexture.magFilter = texture.magFilter;
  64. dataTexture.generateMipmaps = texture.generateMipmaps;
  65. texture.images[ i ] = dataTexture;
  66. }
  67. if ( loaded === 6 ) {
  68. texture.needsUpdate = true;
  69. if ( onLoad ) onLoad( texture );
  70. }
  71. }, onProgress, onError );
  72. }
  73. for ( var i = 0; i < urls.length; i ++ ) {
  74. loadHDRData( i, onLoad, onProgress, onError );
  75. }
  76. return texture;
  77. },
  78. setDataType: function ( value ) {
  79. this.type = value;
  80. this.hdrLoader.setDataType( value );
  81. return this;
  82. }
  83. } );