Click Events

Click an object to select it. Click again to deselect.

import * as EASEL from "easel";

const raycaster = new EASEL.Raycaster();
let selectedMesh = null;

canvas.addEventListener("click", (event) => {
  const x = (event.offsetX / canvas.clientWidth) * 2 - 1;
  const y = -(event.offsetY / canvas.clientHeight) * 2 + 1;

  camera.updateMatrixWorld();
  const camForRay = {
    type: camera.type,
    matrixWorld: camera.matrixWorld,
    projectionMatrixInverse: new EASEL.Matrix4()
      .copy(camera.projectionMatrix)
      .invert(),
  };

  raycaster.setFromCamera({ x, y }, camForRay);
  const hits = raycaster.intersectObjects(meshes);
  const hit = hits.length > 0 ? hits[0].object : null;

  if (selectedMesh !== null) {
    selectedMesh.material.color.set(baseColors.get(selectedMesh));
  }

  if (hit !== null && hit !== selectedMesh) {
    selectedMesh = hit;
    selectedMesh.material.color.set(0xffffff);
  } else {
    selectedMesh = null;
  }
});