Как выполнить выбор и скрытие объектов с помощью three.js?

Показать спрятать:

Я использую Three.js Release 50 и могу показать / скрыть объекты (в моем приложении это меш-потомок) с помощью:

THREE.SceneUtils.traverseHierarchy(mesh,function(child){
    var z = document.getElementById("cameras").selectedIndex*5 -10;
    if (z === -10){
        child.visible = true;
    } else if (child.position.z !== z){
        child.visible = false;
    } else {

        child.visible = true;
    };
}); 

Но при использовании релиза 54 сказано, что использовать object.traverse, но очень сложно, к тому же. Как заменить вышеприведенный код с помощью выпуска 54? Ошибка, которую я получаю при использовании версии 54:

Выбор:

Я нашел очень известный и сложный пример для Picking в Three.js, основанный на «Ray Picking» и его ссылке:Пример комплектации Three.js, Основываясь на этом примере, я пытался реализовать выбор в моем приложении. Но почему-то возникает ошибка в этой строке.

var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position                   
).normalize() );

Я управлял отношениями родителя и потомка конусов [моя геометрия] в обычаеобъект JavaScript [структура данных] таким образом, что (Layer1 {используемый массив для каждого слоя в объекте} имеет 100 конусов, и все они являются родителями, уровень 2 имеет 100 конусов, которые являются дочерними для конусов на layer1 [множественность 1: 1]] и layer 3 имеет конусы, которые являются дочерними по отношению к конусам в слое 2, и их отношение также составляет 1: 1, таким образом, они также являются внуками для конусов слоя 1).

Я использовал сетку, чтобы добавить конус великого родителя из первого слоя, и получил доступ к дочернему элементу в layer2 через этого родителя, добавил его к тому же мешу и тому же доступному внуку через child и добавил к тому же мешу. Наконец я добавил всю сетку на сцену. Из-за изменений "z-глубины" [для первого слоя, z-cordinate: 5, для layer2: 0 и layer 3: -5], layer1 и layer2 и layer3 буквально сформированы в трех слоях как изображение ниже.

Но, используя следующий код, я не мог видеть никаких признаков на моих шишках.

var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
            projector.unprojectVector( vector, camera );

            var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position ).normalize() );

            var intersects = raycaster.intersectObjects( scene.children ); // tried with mesh.children as well, but no change :(

            if ( intersects.length > 0 ) {

                if ( INTERSECTED != intersects[ 0 ].object ) {

                    if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );

                    INTERSECTED = intersects[ 0 ].object;
                    INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
                    INTERSECTED.material.emissive.setHex( 0xff0000 );

                }

            } else {

                if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );

                INTERSECTED = null;

            }

Я хотел, чтобы мой конкретный конус был выбран по мере того, как луч пересекается, и в то же время основывался на том, является ли этот конус дедушкой / дедушкой / родителем / ребенком. У меня есть вспомогательная функция для моей пользовательской структуры данных, которая возвращает родителя, вводя grand parent (Grandparent <- Parent), и child, вводя parent, который вы можете использовать при его выборе.

У меня есть ссылка JSfiddle, которая использует Three.js выпуск 54 и CombinedCamera.js в качестве дополнительных ресурсов, пожалуйста, кто-нибудь, помогите мне разобраться с этим, чтобы работать. Я серьезно нуждаюсь в ПОМОЩИ.

Вот моя ссылка Jsfiddle:http://jsfiddle.net/sagh0900/SQyLL/

Моя предыдущая версияработает Jsfiddle до реализации Picking и использования релиза Three.js 54. В этой версии я использовал релиз 50 of three.js, который я успешно могу показывать / скрывать объекты:http://jsfiddle.net/sagh0900/PrVbg/3/

Заранее спасибо за вашу помощь и поддержку :)

Ответы на вопрос(1)

Ваш ответ на вопрос