Я установил raycaster, чтобы выполнить выбор объекта с моего холста.TrijS raycaster выключен с камерой и объектом с координатой более 1000000
Он хорошо подходит для небольших значений camera.position.x и object.position.x, но моя проблема в том, что он не работает хорошо, когда camera.postion.x - большое количество, в моем случае 10 000 000!
Это совсем не так, на самом деле, я получаю реакцию, когда указатель мыши находится справа от моего объекта на всю длину объекта! Я предполагаю, что вычисление с такими огромными числами создает это искажение, но не может быть уверенным.
var raycaster = new THREE.Raycaster();
var vector = new THREE.Vector2();
camera.position.x = 11000000;
object.position.x = 11000000;
function onMouseMove(event) {
vector.x = ((event.clientX - renderer.domElement.offsetLeft)/renderer.domElement.clientWidth) * 2 - 1;
vector.y = - ((event.clientY - renderer.domElement.offsetTop)/renderer.domElement.clientHeight) * 2 + 1;
raycaster.setFromCamera(vector, camera);
var intersects = raycaster.intersectObjects(scene.children, true);
if(intersects.length>0){
alert("INTERSECTION " + intersects[0].object.userData.name);
}
}canvas.addEventListener('mousemove', onMouseMove, false);
Я пропустил добавление объекта к сцене и некоторые другие вещи, чтобы сообщение не было слишком длинным. Это срабатывает, когда, например, для параметра camera.position.x и object.position.x установлено значение менее 1 000 000, хотя некоторые искажения присутствуют и тогда.
EDIT 1
var scene = new THREE.Scene();
var canvas = document.getElementById('canvas');
var height = canvas.clientHeight;
var width = canvas.clientWidth;
var camera = new THREE.PerspectiveCamera(70, width/height, 1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
canvas.appendChild(renderer.domElement);
Кроме того, здесь является частью моей HTML, где 'холст' ДИВ расположен, я также попытался canvas.offsetLef вместо renderer.domElement.offsetLeft и т.д ..
РЕДАКТИРОВАТЬ 2
<div id="content" ng-controller="ShippingCtrl">
<div id="left_panel">
</div>
<div id="canvas" style="width:900px; height:600px; border:1px solid white">
</div>
<div id="right_pannel">
</div></div>
Я хотел бы быть уверенным, что DOMElement и холст происхождения координаты в HTML/CSS являются одинаковыми и без полей, масштаб браузера или смещения перемещают луч с вашего намерения. Тогда также верно, что ваш renderer setSize также верен. Я никогда не видел пропусков лучей из-за неточности плавания. – Radio
Я бы сказал, что у вас что-то не так в вашей настройке. Возможно, скрипка с полным кодом поможет другим указать на проблему. – Wilt
У меня такая же проблема. Но raycaster находит пересекающиеся объекты, если я вращаюсь и панорамирую мою сцену с помощью orbitControls. Вы нашли решение? –