3 votes

Comment masquer/afficher des objets avec Three.js version 54 ?

J'ai posé cette question en tant que partie de la question Huge mais on m'a recommandé de la poser en plusieurs parties. Voici la partie de ma question précédente. Ma question précédente était : Ici

J'ai utilisé Three.js Release 50 et j'ai pu afficher/masquer les objets (dans mon application, il s'agit d'une maille enfant) à l'aide de.. :

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;
};
}); 

Mais en utilisant la version 54, il est dit que pour utiliser, object.traverse mais trouvé très difficile de la même. Comment remplacer le code ci-dessus en utilisant la version 54 ? L'erreur que je reçois en utilisant la version 54 est :

enter image description here

Veuillez m'aider à résoudre ce problème.

10voto

2pha Points 1433

La variable 'mesh' que vous envoyez à la fonction 'traverseHierarchy' est-elle un Object3d ? Si c'est le cas, avez-vous essayé 'mesh.children' qui devrait renvoyer un tableau d'objets enfants, ou vous pourriez utiliser la fonction traverse sur l'objet mesh.

Voir : http://mrdoob.github.com/three.js/docs/54/#Reference/Core/Object3D

mesh.traverse(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;
    };
});

1voto

Karsten Points 481

Creusez plus profondément, vous trouverez des réponses.

object.traverseHierarchy() a été renommé en object.traverse()

$ grep -A10 'traverse: function' build/three.js
    traverse: function ( callback ) {

            callback( this );

            for ( var i = 0, l = this.children.length; i < l; i ++ ) {

                    this.children[ i ].traverse( callback );

            }

    },

1voto

selvarajmas Points 1013

Il suffit d'utiliser la méthode de traversée d'objet pour cacher le maillage dans three.js. Dans mon code, je cache l'objet en fonction de son nom.

object.traverse ( function (child) {
    if (child instanceof THREE.Mesh) {  
        if (child.name.includes("3F")) {
            child.visible = true;
        } else {
            child.visible = false;
        }
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X