<div id="container"></div>

<button id="one">hide/show1</button>
<button id="two">hide/show2</button>
#c{
  position: fixed;
  top:0;
  left:0;
  width:100vw;
  height:100vh;
}
import * as THREE from 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r123/three.module.min.js';
import { OrbitControls } from 'https://threejs.org/examples/jsm/controls/OrbitControls.js';

let camera, scene, renderer, controls;
let geometry, material, mesh, mesh2;
var container = document.getElementById( 'container' );
var directionalLight;
var camPos;

var on = true;
var on1 = true;

init();
animate();

function init() {

	camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.1, 2 );
	camPos = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.1, 2 );
	scene = new THREE.Scene();  
 let directionalLight = new THREE.DirectionalLight( 0xffffff, 0.7, 1 );
directionalLight.position.set(0.3, 0.3, -0.3);
directionalLight.castShadow = true;
directionalLight.shadow.camera.left = - 0.5;
directionalLight.shadow.camera.right = 0.5;
directionalLight.shadow.camera.top = 0.5;
directionalLight.shadow.camera.bottom = - 0.5;
directionalLight.shadow.camera.fov = 45;
directionalLight.shadow.camera.aspect = 1;
directionalLight.shadow.camera.near = 0.1;
directionalLight.shadow.camera.far = 1;
directionalLight.shadow.bias = 0.001;
directionalLight.shadow.normalBias = 0.003;
directionalLight.shadow.mapSize.width = 2048;
directionalLight.shadow.mapSize.height = 2048;

scene.add( directionalLight );
  
  scene.add(camera);
  scene.add(camPos);
  camera.position.set(0.2,0.5,-0.6);
  
	renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
	renderer.setSize( window.innerWidth, window.innerHeight );
  renderer.toneMapping = THREE.ReinhardToneMapping;
  renderer.setClearColor( 0x000000, 0 );
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.autoUpdate = true;
  renderer.receiveShadow = true;
  renderer.shadowMap.type = THREE.PCFShadowMap;
	document.body.appendChild( container );
  container.appendChild( renderer.domElement );
  controls = new OrbitControls( camera, renderer.domElement );
  
  
    //---- cubes ----//
  
	geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );
	material = new THREE.MeshPhongMaterial( {color: 0x8811ff, opacity: 1, transparent: true} );

	  mesh = new THREE.Mesh( geometry, material );
    mesh.castShadow = true;
  	scene.add( mesh );
  
  	mesh2 = new THREE.Mesh( geometry, material );
    mesh2.castShadow = true;
  	scene.add( mesh2 );
    mesh2.position.x = 0.3;
  
  document.getElementById("one").addEventListener("click", function(){

      mesh2.visible = !mesh2.visible;
 
   });
  
  
   document.getElementById("two").addEventListener("click", function(){

      mesh.visible = !mesh.visible;
 
   });
  
  
  
  
    //-------------- floor ------------//
  
  var geometry1 = new THREE.PlaneBufferGeometry(100, 100);
    var material1 = new THREE.MeshPhongMaterial( { color: 0xef465, flatShading: true} );
        //new THREE.ShadowMaterial();
    material1.opacity = 1;  

    var mesh1 = new THREE.Mesh( geometry1, material1 );
    mesh1.receiveShadow = true;
  
    mesh1.rotation.x = - 1.571;
    mesh1.position.y = -0.1;

    scene.add( mesh1 );
}

function animate() {

	requestAnimationFrame( animate );
var timea = Date.now() * 0.0005;

  camPos.position.set(camera.position.x, camera.position.y, camera.position.z);

  camPos.lookAt(mesh.position);
 
  

  
	renderer.render( scene, camera );

}
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://threejs.org/build/three.module.js
  2. https://threejsfundamentals.org/threejs/../3rdparty/dat.gui.module.js
  3. https://threejs.org/examples/jsm/controls/OrbitControls.js
  4. https://threejs.org/examples/jsm/loaders/GLTFLoader.js
  5. https://threejs.org/examples/jsm/loaders/RGBELoader.js
  6. https://threejs.org/examples/jsm/utils/RoughnessMipmapper.js