|
@@ -57,11 +57,13 @@
|
|
|
envMap: 'HDR',
|
|
|
roughness: 0.0,
|
|
|
metalness: 0.0,
|
|
|
- exposure: 1.0
|
|
|
+ exposure: 1.0,
|
|
|
+ showBackground: true
|
|
|
};
|
|
|
var camera, scene, renderer, controls, objects = [];
|
|
|
var standardMaterial, floorMaterial;
|
|
|
var ldrCubeRenderTarget, hdrCubeRenderTarget, rgbmCubeRenderTarget;
|
|
|
+ var ldrCubeMap, hdrCubeMap, rgbmCubeMap;
|
|
|
|
|
|
init();
|
|
|
animate();
|
|
@@ -114,7 +116,7 @@
|
|
|
};
|
|
|
|
|
|
var hdrUrls = genCubeUrls( './textures/cube/pisaHDR/', '.hdr' );
|
|
|
- new THREE.HDRCubeTextureLoader().load( THREE.UnsignedByteType, hdrUrls, function ( hdrCubeMap ) {
|
|
|
+ hdrCubeMap = new THREE.HDRCubeTextureLoader().load( THREE.UnsignedByteType, hdrUrls, function () {
|
|
|
|
|
|
var pmremGenerator = new THREE.PMREMGenerator( hdrCubeMap );
|
|
|
pmremGenerator.update( renderer );
|
|
@@ -124,14 +126,13 @@
|
|
|
|
|
|
hdrCubeRenderTarget = pmremCubeUVPacker.CubeUVRenderTarget;
|
|
|
|
|
|
- hdrCubeMap.dispose();
|
|
|
pmremGenerator.dispose();
|
|
|
pmremCubeUVPacker.dispose();
|
|
|
|
|
|
} );
|
|
|
|
|
|
var ldrUrls = genCubeUrls( './textures/cube/pisa/', '.png' );
|
|
|
- new THREE.CubeTextureLoader().load( ldrUrls, function ( ldrCubeMap ) {
|
|
|
+ ldrCubeMap = new THREE.CubeTextureLoader().load( ldrUrls, function () {
|
|
|
|
|
|
ldrCubeMap.encoding = THREE.GammaEncoding;
|
|
|
|
|
@@ -143,7 +144,6 @@
|
|
|
|
|
|
ldrCubeRenderTarget = pmremCubeUVPacker.CubeUVRenderTarget;
|
|
|
|
|
|
- ldrCubeMap.dispose();
|
|
|
pmremGenerator.dispose();
|
|
|
pmremCubeUVPacker.dispose();
|
|
|
|
|
@@ -151,7 +151,7 @@
|
|
|
|
|
|
|
|
|
var rgbmUrls = genCubeUrls( './textures/cube/pisaRGBM16/', '.png' );
|
|
|
- new THREE.CubeTextureLoader().load( rgbmUrls, function ( rgbmCubeMap ) {
|
|
|
+ rgbmCubeMap = new THREE.CubeTextureLoader().load( rgbmUrls, function () {
|
|
|
|
|
|
rgbmCubeMap.encoding = THREE.RGBM16Encoding;
|
|
|
|
|
@@ -163,7 +163,6 @@
|
|
|
|
|
|
rgbmCubeRenderTarget = pmremCubeUVPacker.CubeUVRenderTarget;
|
|
|
|
|
|
- rgbmCubeMap.dispose();
|
|
|
pmremGenerator.dispose();
|
|
|
pmremCubeUVPacker.dispose();
|
|
|
|
|
@@ -192,6 +191,7 @@
|
|
|
gui.add( params, 'roughness', 0, 1 );
|
|
|
gui.add( params, 'metalness', 0, 1 );
|
|
|
gui.add( params, 'exposure', 0, 2 );
|
|
|
+ gui.add( params, 'showBackground', true );
|
|
|
gui.open();
|
|
|
|
|
|
}
|
|
@@ -220,30 +220,45 @@
|
|
|
|
|
|
function render() {
|
|
|
|
|
|
- if ( standardMaterial !== undefined ) {
|
|
|
-
|
|
|
- standardMaterial.roughness = params.roughness;
|
|
|
- standardMaterial.metalness = params.metalness;
|
|
|
+ standardMaterial.roughness = params.roughness;
|
|
|
+ standardMaterial.metalness = params.metalness;
|
|
|
+
|
|
|
+ var renderTarget, cubeMap;
|
|
|
+
|
|
|
+ switch ( params.envMap ) {
|
|
|
+
|
|
|
+ case 'LDR':
|
|
|
+ renderTarget = ldrCubeRenderTarget;
|
|
|
+ cubeMap = ldrCubeMap;
|
|
|
+ break;
|
|
|
+ case 'HDR':
|
|
|
+ renderTarget = hdrCubeRenderTarget;
|
|
|
+ cubeMap = hdrCubeMap;
|
|
|
+ break;
|
|
|
+ case 'RGBM16':
|
|
|
+ renderTarget = rgbmCubeRenderTarget;
|
|
|
+ cubeMap = rgbmCubeMap;
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- var newEnvMap = standardMaterial.envMap;
|
|
|
+ var newEnvMap = renderTarget ? renderTarget.texture : null;
|
|
|
|
|
|
- switch ( params.envMap ) {
|
|
|
+ if ( newEnvMap && newEnvMap !== standardMaterial.envMap ) {
|
|
|
|
|
|
- case 'LDR': newEnvMap = ldrCubeRenderTarget ? ldrCubeRenderTarget.texture : null; break;
|
|
|
- case 'HDR': newEnvMap = hdrCubeRenderTarget ? hdrCubeRenderTarget.texture : null; break;
|
|
|
- case 'RGBM16': newEnvMap = rgbmCubeRenderTarget ? rgbmCubeRenderTarget.texture : null; break;
|
|
|
+ standardMaterial.envMap = newEnvMap;
|
|
|
+ standardMaterial.needsUpdate = true;
|
|
|
|
|
|
- }
|
|
|
+ floorMaterial.map = newEnvMap;
|
|
|
+ floorMaterial.needsUpdate = true;
|
|
|
+ }
|
|
|
|
|
|
- if ( newEnvMap !== standardMaterial.envMap ) {
|
|
|
+ if ( ! params.showBackground ) {
|
|
|
|
|
|
- standardMaterial.envMap = newEnvMap;
|
|
|
- standardMaterial.needsUpdate = true;
|
|
|
+ scene.background = null;
|
|
|
|
|
|
- floorMaterial.map = newEnvMap;
|
|
|
- floorMaterial.needsUpdate = true;
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ scene.background = cubeMap;
|
|
|
|
|
|
}
|
|
|
|