three.js - circle manipulator
by mmalex
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.rawgit.com/nmalex/libRAYYS/efdb87dc45ca9ab24dd37a0ebb295832b6e9e9b3/RayysMouse.js"></script>
CSS
body {
overflow: hidden;
}
JavaScript
var renderer;
var controls;
var scene = new THREE.Scene();
var width = window.innerWidth;
var height = window.innerHeight;
var aspect = width / height;
var camera = new THREE.PerspectiveCamera(75, aspect, 0.1, 500);
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(new THREE.Color(0x303030));
renderer.setPixelRatio(1.25);
document.body.appendChild(renderer.domElement);
camera.position.x = 5;
camera.position.y = 5;
camera.position.z = 5;
camera.lookAt(0, 0, 0);
controls = new THREE.OrbitControls(camera, renderer.domElement);
// white spotlight shining from the side, casting a shadow
var spotLight = new THREE.SpotLight(0xffffff, 2.5, 25, Math.PI / 6);
spotLight.position.set(4, 10, 1);
scene.add(spotLight);
// grid
var size = 10;
var divisions = 10;
var gridHelper = new THREE.GridHelper( size, divisions );
scene.add( gridHelper );
var origin = new THREE.Vector3(0, 0, 0);
var radius = 1;
var gizmo = new THREE.Object3D();
var gizmoCircles = [];
// X-plane curve
var curve = new THREE.EllipseCurve(
0, 0, // ax, aY
radius, radius, // xRadius, yRadius
0, 2 * Math.PI, // aStartAngle, aEndAngle
false, // aClockwise
0 // aRotation
);
var points = curve.getPoints( 90 );
var ellipseXgeometry = new THREE.BufferGeometry().setFromPoints( points );
var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
var ellipseX = new THREE.Line( ellipseXgeometry, material );
gizmoCircles.push(ellipseX);
ellipseX.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2));
gizmo.add(ellipseX);
// gizmo.applyMatrix(new THREE.Matrix4().makeTranslation(0, 1, 0));
// gizmo.matrixAutoUpdate = false;
scene.add(gizmo);
var dir = new THREE.Vector3( -1, 0, 0 );
//normalize the direction vector (convert to vector of length 1)
dir.normalize();
var dorigin = new THREE.Vector3( 0, 0, 0 );
var length = 1;
var hex = 0xffffff;
var arrowHelper = new...