|
@@ -32,6 +32,7 @@
|
|
let container, stats;
|
|
let container, stats;
|
|
let camera, scene, renderer, controls;
|
|
let camera, scene, renderer, controls;
|
|
let torusMesh, planeMesh;
|
|
let torusMesh, planeMesh;
|
|
|
|
+ let pngCubeRenderTarget, exrCubeRenderTarget;
|
|
let pngBackground, exrBackground;
|
|
let pngBackground, exrBackground;
|
|
|
|
|
|
init();
|
|
init();
|
|
@@ -69,22 +70,38 @@
|
|
planeMesh.rotation.x = - Math.PI * 0.5;
|
|
planeMesh.rotation.x = - Math.PI * 0.5;
|
|
scene.add( planeMesh );
|
|
scene.add( planeMesh );
|
|
|
|
|
|
- new EXRLoader().load( 'textures/piz_compressed.exr', function ( texture ) {
|
|
|
|
|
|
+ THREE.DefaultLoadingManager.onLoad = function ( ) {
|
|
|
|
|
|
- texture.mapping = THREE.EquirectangularReflectionMapping;
|
|
|
|
- exrBackground = texture;
|
|
|
|
|
|
+ pmremGenerator.dispose();
|
|
|
|
|
|
- } );
|
|
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ new EXRLoader()
|
|
|
|
+ .setDataType( THREE.UnsignedByteType )
|
|
|
|
+ .load( 'textures/piz_compressed.exr', function ( texture ) {
|
|
|
|
+
|
|
|
|
+ exrCubeRenderTarget = pmremGenerator.fromEquirectangular( texture );
|
|
|
|
+ exrBackground = exrCubeRenderTarget.texture;
|
|
|
|
+
|
|
|
|
+ texture.dispose();
|
|
|
|
+
|
|
|
|
+ } );
|
|
|
|
|
|
new THREE.TextureLoader().load( 'textures/equirectangular.png', function ( texture ) {
|
|
new THREE.TextureLoader().load( 'textures/equirectangular.png', function ( texture ) {
|
|
|
|
|
|
- texture.mapping = THREE.EquirectangularReflectionMapping;
|
|
|
|
texture.encoding = THREE.sRGBEncoding;
|
|
texture.encoding = THREE.sRGBEncoding;
|
|
|
|
|
|
- pngBackground = texture;
|
|
|
|
|
|
+ pngCubeRenderTarget = pmremGenerator.fromEquirectangular( texture );
|
|
|
|
+
|
|
|
|
+ pngBackground = pngCubeRenderTarget.texture;
|
|
|
|
+
|
|
|
|
+ texture.dispose();
|
|
|
|
|
|
} );
|
|
} );
|
|
|
|
|
|
|
|
+ const pmremGenerator = new THREE.PMREMGenerator( renderer );
|
|
|
|
+ pmremGenerator.compileEquirectangularShader();
|
|
|
|
+
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
|
|
@@ -146,11 +163,11 @@
|
|
switch ( params.envMap ) {
|
|
switch ( params.envMap ) {
|
|
|
|
|
|
case 'EXR':
|
|
case 'EXR':
|
|
- newEnvMap = exrBackground;
|
|
|
|
|
|
+ newEnvMap = exrCubeRenderTarget ? exrCubeRenderTarget.texture : null;
|
|
background = exrBackground;
|
|
background = exrBackground;
|
|
break;
|
|
break;
|
|
case 'PNG':
|
|
case 'PNG':
|
|
- newEnvMap = pngBackground;
|
|
|
|
|
|
+ newEnvMap = pngCubeRenderTarget ? pngCubeRenderTarget.texture : null;
|
|
background = pngBackground;
|
|
background = pngBackground;
|
|
break;
|
|
break;
|
|
|
|
|