На самом деле не из других ответов работал для меня, но отдать я использовал код, который регулирует положение края и работает отлично.
Использование частей this answer и глядя на источник threejs я в конечном итоге к следующему
var cylinderMesh = function(pointX, pointY)
{
/* edge from X to Y */
var direction = new THREE.Vector3().subVectors(pointY, pointX);
var orientation = new THREE.Matrix4();
/* THREE.Object3D().up (=Y) default orientation for all objects */
orientation.lookAt(pointX, pointY, new THREE.Object3D().up);
/* rotation around axis X by -90 degrees
* matches the default orientation Y
* with the orientation of looking Z */
orientation.multiply(new THREE.Matrix4(1,0,0,0,
0,0,1,0,
0,-1,0,0,
0,0,0,1));
/* cylinder: radiusAtTop, radiusAtBottom,
height, radiusSegments, heightSegments */
var edgeGeometry = new THREE.CylinderGeometry(2, 2, direction.length(), 8, 1);
var edge = new THREE.Mesh(edgeGeometry,
new THREE.MeshBasicMaterial({ color: 0x0000ff }));
edge.applyMatrix(orientation)
edge.position = new THREE.Vector3().addVectors(pointX, direction.multiplyScalar(0.5));
return edge;
}
Возможное улучшение является добавление edgeGeometry и материал в качестве параметров, так что кто-то может повторно использовать те же объекты, а не создавать новый в каждом звонке
это, кажется, очень похожий вопрос, что один: [отображать цилиндр между 2 векторами] [1] [1]: http://stackoverflow.com/questions/ 15139649/three-js-two-points-one-cylinder-align-issue/15160850 # 15160850 – jdregister
Это дубликат http://stackoverflow.com/questions/9038465/three-js-object3d-rotation-to-align -to-a-vector/31987883 # 31987883 – peterjwest