如何使用Three.js发布54隐藏/显示对象?

时间:2013-01-02 13:26:18

标签: three.js

我已将这个问题作为巨大问题的一部分提出,但建议部分提问。这是我上一个问题的一部分。我之前的问题是:Here

我一直在使用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时遇到的错误是:

enter image description here

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:9)

'mesh'变量是否正在将'traverseHierarchy'函数发送给Object3d? 如果是这样,你试过'mesh.children',它应该返回一个子对象数组,或者你可以在网格对象上使用遍历函数。

请参阅: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;
    };
});

答案 1 :(得分:1)

深入挖掘你会发现的答案。

object.traverseHierarchy()被重命名为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 );

            }

    },

答案 2 :(得分:1)

只需使用对象遍历方法隐藏三个网格中的网格。在我的代码中,根据名称隐藏对象

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