(новый StackOverflow, новый для WebGL/three.js, ...)
Three.js - два очка, один цилиндр, выравнивают выпуск
Я использую three.js R54 для построения форс- направленный граф. ребра между узлами - это ТРИ. Линии, которые хороши, но строки не могут быть выбраны с помощью raycaster. поэтому моя цель - взять цилиндры вместо (или вместе с) линий (также потому, что я могу сделать еще кое-что: используя текстуры, ...)
Это то, что я делаю, чтобы поместить цилиндры:
// init reference vector
var upVec = new THREE.Vector3(0,1,0);
//---withhin a loop---
// get direction
var direction = startPoint.subSelf(endPoint).clone();
// half length for cylinder height
var halfLength = direction.length() * 0.5;
// get offset
var offset = endPoint.clone().addSelf(direction.clone().multiplyScalar(0.5));
// normalize direc
direction.normalize();
//newUpVec = upVec - (upVec *(dot) direction) * direction - projection of direction
var newUpVec = upVec.clone().subSelf(direction.clone().multiplyScalar(upVec.dot(direction.clone()))).normalize();
var right = newUpVec.clone().crossSelf(direction.clone());
//build rotation matrix
var rot = new THREE.Matrix4(right.x, right.y, right.z, 0,
newUpVec.x, newUpVec.y, newUpVec.z, 0,
direction.x, direction.y, direction.z,0,
0,0,0,1);
//build translation matrix
var transla = new THREE.Matrix4(1, 0, 0, offset.x,
0, 1, 0, offset.y,
0, 0, 1, offset.z,
0, 0, 0, 1);
//build transformation matrix
var transfo = new THREE.Matrix4().multiply(transla, rot);
// create geometry
var cylgeo = new THREE.CylinderGeometry(2, 2, halfLength * 2, 12, 1, false);
cylgeo.applyMatrix(transfo);
var cylMesh = new THREE.Mesh(cylgeo, new THREE.MeshLambertMaterial({color:0x000000,
wireframe: true, shading: THREE.FlatShading}));
(descripted в: http://www.fastgraph.com/makegames/3drotation/)
Таким образом, цилиндры расположены справа смещения и согласования в какой-то образом, но не к двум точкам (начало, конец) краев.
любое предложение будет оценено!
ДА !!! оно работает! хорошо я видел ваш упомянутый пример, но я не дал ему попробовать, потому что я действительно не понимаю, что там происходит. Я более подробно рассмотрю используемые функции в рамках. Спасибо большое! – ewo
вы должны уметь видеть http://meta.stackexchange.com/questions/167748/user-cannot-accept-my-answer – jdregister
В r58 rotateX устарел для makeRotationX и multiplySelf, addSelf, subSelf необходимо изменить на multiply, add, sub соответственно – jdregister