Доступ к данным пользователя на объектах, полученных в результате пересечения Raycast

Я пытаюсь отобразить имя зависшего объекта в сцене WebGL на базе three.js. Я использую raycasting с классом Raycaster, и это работает хорошо, мой объект меняет цвет, и я знаю его положение, но когда я пытаюсь получить доступ к userData объекта, он отображает undefined.

Является ли объект, возвращаемый функцией intersectObject(), не копией исходного объекта? Мне интересно, если где-то в будущем он потеряет свои свойства.

    function onMouseMove(e) {

        var intersectedOne = false;

        for (var i = 0, len = group.children.length; i < len; i++) {
            setMaterial(group, material);
        }


        mouseVector.x = 2 * (e.clientX / window.innerWidth) - 1;
        mouseVector.y = 1 - 2 * (e.clientY / window.innerHeight);

        raycaster.setFromCamera(mouseVector, camera);

        var intersects = raycaster.intersectObjects(group.children, true);

        for (var i = 0; i < intersects.length; i++) {
            var intersection = intersects[i];
            var obj = intersection.object;
            if (intersection != 0 && intersectedOne == false) {
                intersectedOne = true;
                obj.material = selectedMaterial;
                text2.innerHTML = obj.userData.CADEIRA;
            }
        }
    }

text2.innerHTML показывает undefined каждый раз, когда я навожу курсор на объект, в то время как он должен показывать имя объекта.


person Christian Marques    schedule 28.10.2015    source источник
comment
Объекты, которые вы можете получить с помощью intersectObject и intersectObjects, являются ссылками — это один и тот же объект — так что вы, должно быть, делаете что-то не так, хотя не сразу понятно, что именно. И intersection != 0 не имеет смысла, хотя это не должно вызывать проблемы. Можете ли вы предоставить jsfiddle, пожалуйста?   -  person Leeft    schedule 29.10.2015
comment
это странно, потому что я пытался напечатать userData массива, который я передаю в intersectObjects, непосредственно перед вызовом этой функции, и все метаданные есть. Я выложу jsFiddle.   -  person Christian Marques    schedule 29.10.2015
comment
jsfiddle.net/electricganesha/ot7h6v49/3, как вы можете видеть, при наведении курсора мыши на объект, печать консоли показывает «неопределенный», в то время как непосредственно перед печатью массив объектов, переданных в intersectObjects, содержит метаданные.   -  person Christian Marques    schedule 29.10.2015


Ответы (1)


Вместо того, чтобы делать

var newObject = object.clone();

ты должен сделать

var newObject = child.clone();
person gaitat    schedule 29.10.2015