I wrote this code to change the sex in the scene.
action_floor_glass.onChange( function (opt_none) { if (opt_none== true){ geometry_floor2.visible = false; geometry_floor1.visible = true; } if (opt_none== false){ geometry_floor1.visible = false; geometry_floor2.visible = true; } } ); var plane_gam = new THREE.PlaneBufferGeometry( 2000, 2000 ) ; var glass_mat = { clipBias: 0.003, textureWidth: window.innerWidth * window.devicePixelRatio, textureHeight: window.innerHeight * window.devicePixelRatio, color: 0x889999, recursion: 1 } ; var plane_mat = new THREE.MeshStandardMaterial( { color: 0x808080, roughness: 0, metalness: 0 } ) ; var geometry_floor1 = new THREE.Reflector(plane_gam, glass_mat); geometry_floor1.rotation.x = - Math.PI / 2; geometry_floor1.receiveShadow = true geometry_floor1.visible = false; scene.add( geometry_floor1 ); var geometry_floor2 = new THREE.Mesh( plane_gam, plane_mat ); geometry_floor2.rotation.x = - Math.PI / 2; geometry_floor2.receiveShadow = true; scene.add( geometry_floor2 ); Everything works as it should. But I am interested in the question whether it is possible to somehow shorten this code. So what would change not the object itself but its properties (material)?
Something like that
var geometry = new THREE.PlaneBufferGeometry( 2000, 2000 ) ; var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); var controllerDecor = gui.add( params, 'material', [ 'Basic ', 'Phong', 'depthBasic', 'depthRGBA' ] ); controllerDecor.onChange(function(opt_none){ if (opt_none == 'Basic '){ material = materialBasic } if (opt_none== 'Phong'){ material = materialPhong } }); var materialBasic = new THREE.MeshBasicMaterial( { color: 0x990000 } ); var materialPhong = new THREE.MeshPhongMaterial( { color: 0x00ff00 } ); var cube = new THREE.Mesh( geometry, material ); scene.add( cube );