|
@@ -45,18 +45,15 @@ body {
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
|
-var scene, camera, renderer, info, mouse2d, sun, loader, stats;
|
|
|
+var camera, scene, projector, renderer,
|
|
|
+info, mouse = { x: 0, y: 0 }, sun, loader, stats;
|
|
|
+
|
|
|
var meshes = [];
|
|
|
|
|
|
var theta = 0;
|
|
|
var camdist = 1500;
|
|
|
|
|
|
-var totalFaces = 0;
|
|
|
-var totalColliders = 0;
|
|
|
-
|
|
|
-var ray = new THREE.Ray();
|
|
|
-var matrix = new THREE.Matrix4(),
|
|
|
- matrix2 = new THREE.Matrix4();
|
|
|
+var totalFaces = 0, totalColliders = 0;
|
|
|
|
|
|
function init() {
|
|
|
|
|
@@ -67,12 +64,13 @@ function init() {
|
|
|
|
|
|
camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
|
|
|
camera.position.z = camdist;
|
|
|
- mouse2d = new THREE.Vector3( 0, 0, 1 );
|
|
|
|
|
|
loader = new THREE.JSONLoader( );
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
|
|
|
+ projector = new THREE.Projector();
|
|
|
+
|
|
|
renderer = new THREE.WebGLRenderer();
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
container.appendChild( renderer.domElement );
|
|
@@ -152,7 +150,7 @@ function loadCube(p) {
|
|
|
addCube( new THREE.Vector3( 0, -sy, -sz*2), geometry );
|
|
|
addCube( new THREE.Vector3( sx,-sy, -sz*2), geometry );
|
|
|
|
|
|
- //info.innerHTML = "Total colliders: " + totalColliders + " (Faces: " + totalFaces + ")<br>";
|
|
|
+ // info.innerHTML = "Total colliders: " + totalColliders + " (Faces: " + totalFaces + ")<br>";
|
|
|
|
|
|
};
|
|
|
|
|
@@ -186,9 +184,8 @@ function addCube( p, g) {
|
|
|
function onDocumentMouseMove( event ) {
|
|
|
|
|
|
event.preventDefault();
|
|
|
- mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1;
|
|
|
- mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
|
|
|
- mouse2d.z = 1;
|
|
|
+ mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
|
|
|
+ mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
|
|
|
|
|
|
};
|
|
|
|
|
@@ -197,15 +194,6 @@ function animate() {
|
|
|
|
|
|
requestAnimationFrame( animate );
|
|
|
|
|
|
- ray.origin.copy( mouse2d );
|
|
|
-
|
|
|
- matrix.copy( camera.matrixWorld );
|
|
|
- matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix, matrix2 ) );
|
|
|
- matrix.multiplyVector3( ray.origin );
|
|
|
-
|
|
|
- ray.direction.copy( ray.origin );
|
|
|
- ray.direction.subSelf( camera.position );
|
|
|
-
|
|
|
if( meshes.length == 0 ) return;
|
|
|
|
|
|
var i, l = meshes.length;
|
|
@@ -216,6 +204,10 @@ function animate() {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
|
|
|
+ projector.unprojectVector( vector, camera );
|
|
|
+
|
|
|
+ var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
|
|
|
|
|
|
var c = THREE.Collisions.rayCastNearest( ray );
|
|
|
|