JSFiddle - React, Tailwind, and code Playground
HTML
<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script>
THREE.DragControls = function ( _objects, _camera, _domElement ) {
var _plane = new THREE.Plane();
var _raycaster = new THREE.Raycaster();
var _mouse = new THREE.Vector2();
var _offset = new THREE.Vector3();
var _intersection = new THREE.Vector3();
var _worldPosition = new THREE.Vector3();
var _inverseMatrix = new THREE.Matrix4();
var _intersections = [];
var _selected = null, _hovered = null;
//
var scope = this;
function activate() {
_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );
_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );
_domElement.addEventListener( 'mouseup', onDocumentMouseCancel, false );
_domElement.addEventListener( 'mouseleave', onDocumentMouseCancel, false );
_domElement.addEventListener( 'touchmove', onDocumentTouchMove, false );
_domElement.addEventListener( 'touchstart', onDocumentTouchStart, false );
_domElement.addEventListener( 'touchend', onDocumentTouchEnd, false );
}
function deactivate() {
_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );
_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );
_domElement.removeEventListener( 'mouseup', onDocumentMouseCancel, false );
_domElement.removeEventListener( 'mouseleave', onDocumentMouseCancel, false );
_domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false );
_domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false );
_domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false );
}
function dispose() {
deactivate();
}
function onDocumentMouseMove( event ) {
event.preventDefault();
var rect = _domElement.getBoundingClientRect();
_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
_mouse.y = - ( (...
CSS
body { margin: 0 }
canvas { display: block }
JavaScript
var camera, scene, renderer, controls;
var cubes = [];
var drag_obj =[];
var links = [];
var dragControls;
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(1, 1, 1).setLength(15);
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);
var plane = new THREE.GridHelper(10,20);
scene.add(plane);
var cube1 = createCube("red");
var cube2 = createCube("green");
var cube3 = createCube("blue");
//scene.matrixAutoupdate = false;
init();
animate();
function init() {
dragControls = new THREE.DragControls(drag_obj, camera, renderer.domElement);
dragControls.transformRoot = true;
dragControls.addEventListener('dragstart', function(event) {
controls.enabled = false;
});
dragControls.addEventListener('dragend', function(event) {
controls.enabled = true;
});
}
function createCube(color) {
var cubegeom = new THREE.BoxGeometry(1, 1, 1);
var edgeGeo = new THREE.EdgesGeometry(cubegeom);
let material = new THREE.LineBasicMaterial({
color: color,
linewidth: 1
});
let lines_mesh = new THREE.LineSegments(edgeGeo, material);
var cube = new THREE.Mesh(cubegeom, new THREE.MeshBasicMaterial({
color: color
}));
cube.add(lines_mesh);
setRandomPosition(cube);
scene.add(cube);
cubes.push(cube);
return cube;
}
var raycaster, mouse = { x : 0, y : 0 };
raycaster = new THREE.Raycaster();
window.addEventListener( 'mousedown', raycast, false );
var INTERSECTED;
function setRandomPosition(obj) {
obj.position.set(Math.random() * 10 - 5, Math.random() * 10 - 5, Math.random() * 10 - 5);
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
renderer.render(scene, camera);
}
function raycast(e) {
...