Достъп до UserData на обекти, произтичащи от Raycast Intersection

Опитвам се да покажа името на задържан обект в 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