Как клонировать объект Mesh of Line в THREE.js? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь создать цикл из 10 строк.Однако 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;
    }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Есть несколько проблем с вашим кодом (например, вы увеличиваете 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

...