如何在THREE.js中克隆Line对象的Mesh?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在THREE.js中克隆Line对象的Mesh?相关的知识,希望对你有一定的参考价值。

我试图创建一个10行的for循环。但是line.Clone()给了我一个错误,因为它没有找到任何要克隆的网格物体?如果您知道如何访问线的网格,请告诉我。

这是一些代码:

forward_RT(){

    var spotLight = new THREE.SpotLight( 0xffffff ); //White Color
    spotLight.position.set( 150, 500, -210 );
    scene_Main.add( spotLight );

    var material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
    var geometry = new THREE.Geometry();
    geometry.vertices.push(new THREE.Vector3( spotLight.position.x, spotLight.position.y, spotLight.position.z) );
    geometry.vertices.push(new THREE.Vector3( ray_End_pos_X, ray_End_pos_Y, ray_End_pos_Z) );

    var line = new THREE.Line( geometry, material );

    for(var i=0; i<10; i++){
        //Also tried 
        //var newLine = line.clone(); & scene_Main.add(newLine);
        scene.add(line.clone());

        ray_End_pos_X += 50;
    }
}
答案

您的代码有几个问题(例如,您增加了ray_End_pos_X但不在循环中使用它)。我怀疑你可能只需要在每次迭代期间改变几何。

我会选择克隆几何和共享材料的新线。我快速检查,这工作:

    var rayX = 0, rayY=0, rayZ = 0;

    var material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
    var geometry = new THREE.Geometry();
    geometry.vertices.push(new THREE.Vector3( spotLight.position.x, spotLight.position.y, spotLight.position.z) );
    geometry.vertices.push(new THREE.Vector3( rayX, rayY, rayZ) );

    for(var i=0; i<10; i++) {
        var newLine = new THREE.Line(geometry.clone(), material);
        newLine.geometry.vertices[1].x = rayX;
        this.context.scene.add(newLine);
        rayX += 0.1;
    }

这就是它的外观(红线,其余部分无关紧要):

result screenshot

以上是关于如何在THREE.js中克隆Line对象的Mesh?的主要内容,如果未能解决你的问题,请参考以下文章

Three.js如何计算Mesh的体积

如何在 Three.js 中克隆包含多个网格的 Collada 对象

Three.js教程:点线网格模型介绍

Three.js建模基础

three.js - 如何动态更改对象的不透明度?

THREE.Mesh 的法线与原始模型不同