Нахождение UV-координат точки на материале, визуализируемом на 3D-кубе, в threejs

Я хочу рассчитать УФ-координаты одной точки материала, отображаемого на 3D-кубе.

Я нахожу пересечение указателя мыши с лучом камеры, используя THREE.Raycaster как:

  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

  var vector = new THREE.Vector3(mouse.x, mouse.y, 1);
  vector.unproject(camera);
  var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());

  var intersects = raycaster.intersectObjects(scene.children);

Я попытался вычислить точки, но отображение координат x, y меняется при увеличении или уменьшении масштаба. Фрагмент кода выглядит следующим образом:

 var pixelX = intersects[0].uv.x;
 var pixelY = intersects[0].uv.y;

где intersects[0] представляет точки пересечения луча от камеры.

Для получения более подробной информации см.: http://plnkr.co/edit/YYN8aechHGTKXvPv6tOo?p=preview< /а>.

На основе плунжера предположим, что я получаю координаты uv (скажем, x1, y1) точки, с которой начинается спиральный объект. Но после увеличения или уменьшения масштаба куба координаты uv этой точки не остаются прежними, т.е. меняются на некоторую случайную точку (x2, y2)


person Mohit Patel    schedule 18.07.2017    source источник
comment
Не ответ: не создавайте новый raycaster каждый раз, когда мышь двигается! См. этот ответ. Кроме того, у вас есть цикл анимации, поэтому удалите controls.addEventListener( change ) и controls.update().   -  person WestLangley    schedule 18.07.2017
comment
intersects на самом деле представляет собой массив объектов-пересечений, а не грань. Посмотрите документацию для intersectObject, а затем отладьте свой код, чтобы посмотреть, что вы получаете. Я только что отладил ваш плункер, и значения UV, возвращающиеся из пересечения, - это то, что я ожидал увидеть.   -  person TheJim01    schedule 18.07.2017
comment
@ TheJim01 Извини, мой плохой. Я хотел сказать, что индекс указывает на грань куба, полученную с помощью Math.floor(intersects[0].faceIndex / 2);   -  person Mohit Patel    schedule 18.07.2017
comment
Я не вижу того, что вы видите. Ваш plunkr работает, как и ожидалось, и масштабирование не меняет для меня позиции UV. Я вижу некоторую задержку событий (вероятно, вызванную plunkr или проблемами, поднятыми WestLangley). Какой браузер вы используете?   -  person TheJim01    schedule 19.07.2017