2017-07-21 4 views
1

Ich möchte Scheitelpunkte mit Liniensegmenten verbinden. Das ist, was ich mit einfachen Linien bekommen habe. Es funktioniert gut.Three.js Tubes nicht lang genug

let line2 = (from : Vector3, to : Vector3) : THREE.Line => { 

    var lineGeometry = new THREE.BufferGeometry(); 

    var positions = new Float32Array(3 * 2); 

    positions[0]=to.x; 
    positions[1]=to.y; 
    positions[2]=to.z; 

    positions[3]=from.x; 
    positions[4]=from.y; 
    positions[5]=from.z; 

    lineGeometry.addAttribute('position', new THREE.BufferAttribute(positions, 3)); 

    let lineMaterial = new THREE.LineBasicMaterial({ color: 0x0f35ff }); 

    let line = new THREE.Line(lineGeometry, lineMaterial); 

    return line; 

}; 

Lines ends closed in points as expected

Aber wenn ich zu Röhren Problem wechseln auftreten, Länge kürzer werden.

enter image description here

-Code für Rohre, Positionsdaten gleich ist.

let tube = (from : Vector3, to : Vector3) : THREE.Mesh => { 

    let path = new THREE.LineCurve3(to, from); 

    let tubeGeometry = new THREE.TubeGeometry(path, 32, 0.05, 8, true); 

    let material = new THREE.MeshBasicMaterial({color:0x3212ac}); 

    let mesh = new THREE.Mesh(tubeGeometry, material); 

    return mesh; 

}; 

Antwort

1

Der Täter das „Schließen“ der Rohrenden zu sein scheint, wenn man diese drei Freigabe nicht mehr das letzte Segment des Zylinders erzeugt (versuchen false als letzte Parameter an den TubeGeometry Konstruktor der sehen Unterschied).

Als quickfix im generateBufferData() Verfahren der TubeBufferGeometry Quelle, versuchen Sie so etwas wie

//generateSegment((closed === false) ? tubularSegments : 0); 
generateSegment(tubularSegments); 
if (closed === true) 
    generateSegment(0); 
+0

dies tatsächlich der Fall war, danke –