3

巨大な質問の一部としてこの質問をしましたが、部分的に質問することをお勧めしました。これが私の前の質問の一部です。私の以前の質問は次のとおりです

私は Three.js リリース 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 の使用中に発生するエラーは次のとおりです。

ここに画像の説明を入力

これを整理するのを手伝ってください。

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 に答える