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

问题描述 投票:0回答:3

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

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

enter image description here

请帮我解决这个问题。

three.js
3个回答
13
投票

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

参见:http://mrdoob.github.com/third.js/docs/54/#Reference/Core/Object3D

mesh.traverse(function (child) {
  const 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
投票

深入挖掘,你会找到答案。

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

            }

    },

1
投票

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

object.traverse ( function (child) {
    if (child instanceof THREE.Mesh) {  
        if (child.name.includes("3F")) {
            child.visible = true;
        } else {
            child.visible = false;
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.