Я хочу рассчитать УФ-координаты одной точки материала, отображаемого на 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)
controls.addEventListener( change )
иcontrols.update()
. - person WestLangley   schedule 18.07.2017intersects
на самом деле представляет собой массив объектов-пересечений, а не грань. Посмотрите документацию дляintersectObject
, а затем отладьте свой код, чтобы посмотреть, что вы получаете. Я только что отладил ваш плункер, и значения UV, возвращающиеся из пересечения, - это то, что я ожидал увидеть. - person TheJim01   schedule 18.07.2017