CylinderLink
DragControls
HTML
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://threejs.org/examples/js/controls/DragControls.js"></script>
<script type="x-shader/x-vertex" id="vertexShader">
attribute vec3 center;
varying vec3 vCenter;
void main() {
vCenter = center;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<script type="x-shader/x-fragment" id="fragmentShader">
void main() {
gl_FragColor.rgb = mix(vec3(0.659, 0.733, 0.749), vec3(1.0, 0.949, 0.878), edgeFactorTri());
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0);
}
</script>
CSS
body {
overflow: hidden;
margin: 0;
padding: 0;
}
JavaScript
var camera, scene, renderer;
var cube1, cube2;
var link;
init();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(1, 1, 1);
//camera.lookAt(scene.position);
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
controls = new THREE.OrbitControls(camera, renderer.domElement);
//fill the scene
scene.add(new THREE.GridHelper(10,20));
scene.add(new THREE.AxisHelper());
var cubegeom = new THREE.BoxGeometry(0.5, 0.5, 0.5);
cube1 = new THREE.Mesh(cubegeom, new THREE.MeshBasicMaterial({color: 'red'}));
cube1.position.set(0, 1, 1);
scene.add(cube1);
cube2 = new THREE.Mesh(cubegeom, new THREE.MeshBasicMaterial({color: 'red'}));
cube2.position.set(3, 1, 1);
scene.add(cube2);
var linkGeom = new THREE.CylinderGeometry(0.12, 0.12, 1);
linkGeom.translate(0, 0.5, 0);
linkGeom.rotateX(Math.PI / 2);
link = new THREE.Mesh(linkGeom, new THREE.MeshBasicMaterial({color: "yellow"}));
link.position.copy(cube1.position);
link.lookAt(cube2.position);
link.scale.z = cube1.position.distanceTo(cube2.position);
scene.add(link);
}
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}