Если вы работаете с холстом, который находится не в верхнем левом углу страницы, вам потребуется еще один шаг, чтобы добраться до нормализованных координат устройства.Обратите внимание, что NDC в WebGL относятся к области рисования холста, а не к экрану или документу ([-1,-1]
и [1,1]
- это левый нижний и верхний правый углы холста).
В идеале, вы бы использовали ev.offsetX
/ ev.offsetY
, но поддержки браузера для этого пока нет.Вместо этого вы можете сделать это следующим образом:
const {top, left, width, height} = renderer.domElement.getBoundingClientRect();
mouse.x = -1 + 2 * (ev.clientX - left) / width;
mouse.y = 1 - 2 * (ev.clientY - top) / height;
См. Здесь рабочий пример: https://codepen.io/usefulthink/pen/PVjeJr
Другой вариант - статическое вычисление положения смещения и размера холста настраницы и вычислить окончательные значения на основе ev.pageX
/ ev.pageY
.Это дает преимущество в том, что он немного более стабилен (так как не зависит от прокрутки) и позволит кэшировать значения top / left / width / height.