minimal three.js
with orbitControls, XZgrid, info
by jason870509
HTML
<div id="info">minimal three.js</div>
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js">
</script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var camera, scene, renderer;
var pickables = [];
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
var light;
var lit = false;
init();
animate();
function init() {
scene = new THREE.Scene();
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
// renderer.setClearColor(0x888888);
document.body.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 500;
let controls = new THREE.OrbitControls(camera, renderer.domElement);
////////////////////////////////////////////////////////////////
var gridXZ = new THREE.GridHelper(200, 20, 'red', 'white');
//scene.add(gridXZ);
light = new THREE.PointLight( 0xffffff, 1 );
light.position.set( 50, 50, 50 );
scene.add( light );
myswitch = new THREE.Group();
casing = new THREE.Mesh(new THREE.CylinderGeometry(15, 15, 10, 20), new THREE.MeshPhongMaterial())
core = new THREE.Mesh(new THREE.CylinderGeometry(10, 10, 12, 20), new THREE.MeshPhongMaterial({
//color: 'red'
}))
myswitch.add(casing, core);
scene.add(myswitch);
casing.position.y = 5;
core.position.y = 6;
pickables = [core]
document.addEventListener('mousedown', onDocumentMouseDown, false)
}
function onDocumentMouseDown(event) {
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
// find intersections
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(pickables, false);
if (intersects.length > 0) {
lit = !lit; // toggle;
if (lit) {
core.material.emissive = new THREE.Color(0x030303);
light.intensity = 1;
} else {
core.material.emissive = new THREE.Color('red');
light.intensity = 0;
}
} else {
console.log('no hit')
}
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
...