raycaster:pick
by jmchen
HTML
<div id="info">Picking Demo</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js">
</script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
JavaScript
var camera, scene, renderer, light, controls;
var cube1, cube2, sphere;
var raycaster;
var mouse = new THREE.Vector2();
var pickables = [];
init();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 500;
scene.add(camera);
var geometry = new THREE.BoxGeometry(20, 20, 20);
// clone wont work ... seems to retain the same material
var cube1 = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({
color: 0xff1234
}));
cube1.position.x = -60;
var cube2 = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({
color: 0x2134ff
}));
// test whether Object3D is pickable
var cubeGroup = new THREE.Object3D();
cubeGroup.add (cube2);
cubeGroup.position.x = 60;
sphere = new THREE.Mesh(new THREE.SphereGeometry(10), new THREE.MeshLambertMaterial());
scene.add(cube1);
scene.add(cubeGroup);
scene.add(sphere);
pickables = [cube1, cubeGroup];
// note that cubeGroup (an Object3D) is not pickable!!!
cube1.name = "cube1";
cube2.name = "cube2";
light = new THREE.PointLight(0xffffff);
light.position.set(100, 300, 200);
scene.add(light);
var gridXZ = new THREE.GridHelper(100, 10);
gridXZ.setColors(new THREE.Color(0xff0000), new THREE.Color(0xffffff));
scene.add(gridXZ);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
controls = new THREE.OrbitControls(camera, renderer.domElement);
document.body.appendChild(renderer.domElement);
raycaster = new THREE.Raycaster();
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
}
function onDocumentMouseDown( event ) {
// PICKING DETAILS:
// convert mouse.xy = [-1,1]^2 (NDC)
//...