3

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

我一直在使用 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;
};
}); 

但是在使用release 54时,据说要使用,object.traverse却发现很难一样。如何使用版本 54 替换上述代码?我在使用 54 版时遇到的错误是:

在此处输入图像描述

请帮我解决这个问题。

4

3 回答 3

10

您发送“traverseHierarchy”函数的“网格”变量是 Object3d 吗?如果是这样,您是否尝试过应该返回子对象数组的“mesh.children”,或者您可以在网格对象上使用 traverse 函数。

请参阅: 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;
    };
});
于 2013-01-02T14:42:00.397 回答
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 );

            }

    },
于 2013-01-02T20:18:24.910 回答
1

只需使用对象遍历方法在three.js中隐藏网格。在我的代码中根据其名称隐藏对象

object.traverse ( function (child) {
    if (child instanceof THREE.Mesh) {  
        if (child.name.includes("3F")) {
            child.visible = true;
        } else {
            child.visible = false;
        }
    }
});
于 2016-09-23T07:15:57.480 回答