|
@@ -14,12 +14,12 @@
|
|
|
</head>
|
|
|
<body>
|
|
|
|
|
|
-
|
|
|
<script type="text/javascript" src="../src/Three.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Color.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Vector2.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Vector3.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Vector4.js"></script>
|
|
|
+ <script type="text/javascript" src="../src/core/Ray.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Rectangle.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Matrix3.js"></script>
|
|
|
<script type="text/javascript" src="../src/core/Matrix4.js"></script>
|
|
@@ -52,9 +52,6 @@
|
|
|
<script type="text/javascript" src="../src/renderers/renderables/RenderableFace4.js"></script>
|
|
|
<script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
|
|
|
<script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
|
|
|
- <script type="text/javascript" src="../src/hci/ClickResolver.js"></script>
|
|
|
- <script type="text/javascript" src="../src/hci/SelectableFace3.js"></script>
|
|
|
- <script type="text/javascript" src="../src/hci/SelectableFace4.js"></script>
|
|
|
|
|
|
<script type="text/javascript" src="geometry/primitives/Cube.js"></script>
|
|
|
<script type="text/javascript" src="geometry/primitives/Sphere.js"></script>
|
|
@@ -63,9 +60,6 @@
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
|
- var SCREEN_WIDTH = window.innerWidth;
|
|
|
- var SCREEN_HEIGHT = window.innerHeight;
|
|
|
-
|
|
|
var container;
|
|
|
var stats;
|
|
|
|
|
@@ -79,7 +73,6 @@
|
|
|
|
|
|
var windowHalfX = window.innerWidth / 2;
|
|
|
var windowHalfY = window.innerHeight / 2;
|
|
|
- var clickResolver;
|
|
|
|
|
|
init();
|
|
|
setInterval(loop, 1000/60);
|
|
@@ -89,36 +82,18 @@
|
|
|
container = document.createElement('div');
|
|
|
document.body.appendChild(container);
|
|
|
|
|
|
- var info = document.createElement('div');
|
|
|
- info.id = 'msg';
|
|
|
- info.style.position = 'absolute';
|
|
|
- info.style.top = '10px';
|
|
|
- info.style.width = '100%';
|
|
|
- info.style.textAlign = 'center';
|
|
|
- info.innerHTML = 'No click detected';
|
|
|
- container.appendChild(info);
|
|
|
-
|
|
|
- camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
|
|
|
+ camera = new THREE.Camera( 70, window.innerWidth / window.innerHeight, 1, 10000 );
|
|
|
camera.position.y = 300;
|
|
|
camera.position.z = 500;
|
|
|
camera.target.position.y = 150;
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
- clickResolver = new THREE.ClickResolver( camera, scene );
|
|
|
-
|
|
|
- // Click Cube
|
|
|
- var opacity = 0.8;
|
|
|
|
|
|
geometry = new Cube( 200, 200, 200 );
|
|
|
|
|
|
for (var i = 0, l = geometry.faces.length; i < l; i++) {
|
|
|
|
|
|
- geometry.faces[i].material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, opacity ) ];
|
|
|
- geometry.faces[i].selectable = true;
|
|
|
- geometry.faces[i].onSelect = function ( s, c, o, f, p ) {
|
|
|
- f.material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, opacity ) ];
|
|
|
- document.getElementById( "msg" ).innerHTML = "Click detected at " + p;
|
|
|
- }
|
|
|
+ geometry.faces[i].material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, 0.8 ) ];
|
|
|
|
|
|
}
|
|
|
|
|
@@ -130,12 +105,7 @@
|
|
|
|
|
|
for (var i = 0, l = geometry2.faces.length; i < l; i++) {
|
|
|
|
|
|
- geometry2.faces[i].material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, opacity ) ];
|
|
|
- geometry2.faces[i].selectable = true;
|
|
|
- geometry2.faces[i].onSelect = function ( s, c, o, f, p ) {
|
|
|
- f.material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, opacity ) ];
|
|
|
- document.getElementById( "msg" ).innerHTML = "Click detected at " + p;
|
|
|
- };
|
|
|
+ geometry2.faces[i].material = [ new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, 0.8 ) ];
|
|
|
|
|
|
}
|
|
|
|
|
@@ -144,37 +114,10 @@
|
|
|
cube2.position.z = 300;
|
|
|
scene.addObject(cube2);
|
|
|
|
|
|
- var geometry = new THREE.Geometry();
|
|
|
-
|
|
|
- for (var i = 0; i < 100; i ++) {
|
|
|
-
|
|
|
- var v = new THREE.Vector3( Math.random() * 1000 - 500, Math.random() * 1000 - 500, Math.random() * 1000 - 500 );
|
|
|
-
|
|
|
- var v0 = new THREE.Vertex( new THREE.Vector3( Math.random() * 100 - 50, Math.random() * 100 - 50, Math.random() * 100 - 50 ) );
|
|
|
- var v1 = new THREE.Vertex( new THREE.Vector3( Math.random() * 100 - 50, Math.random() * 100 - 50, Math.random() * 100 - 50 ) );
|
|
|
- var v2 = new THREE.Vertex( new THREE.Vector3( Math.random() * 100 - 50, Math.random() * 100 - 50, Math.random() * 100 - 50 ) );
|
|
|
-
|
|
|
- v0.position.addSelf( v );
|
|
|
- v1.position.addSelf( v );
|
|
|
- v2.position.addSelf( v );
|
|
|
-
|
|
|
- var face = new THREE.Face3( geometry.vertices.push( v0 ) - 1, geometry.vertices.push( v1 ) - 1, geometry.vertices.push( v2 ) - 1, null, new THREE.MeshColorFillMaterial( Math.random() * 0xffffff, 0.5 ) );
|
|
|
-
|
|
|
- geometry.faces.push( face );
|
|
|
- }
|
|
|
-
|
|
|
- geometry.computeNormals();
|
|
|
- geometry.computeCentroids();
|
|
|
-
|
|
|
- var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() );
|
|
|
- // mesh.doubleSided = true;
|
|
|
- // mesh.scale.x = mesh.scale.y = mesh.scale.z = 2;
|
|
|
- scene.addObject(mesh);
|
|
|
-
|
|
|
projector = new THREE.Projector();
|
|
|
|
|
|
renderer = new THREE.CanvasRenderer();
|
|
|
- renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
|
+ renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
|
|
container.appendChild(renderer.domElement);
|
|
|
|
|
@@ -184,30 +127,36 @@
|
|
|
container.appendChild(stats.domElement);
|
|
|
|
|
|
document.addEventListener('mousedown', onDocumentMouseDown, false);
|
|
|
- // document.addEventListener('mousemove', onDocumentMouseMove, false);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
function onDocumentMouseDown( event ) {
|
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
- document.getElementById("msg").innerHTML = "";
|
|
|
+ var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
|
|
|
+ projector.unprojectVector( vector, camera );
|
|
|
|
|
|
- clickResolver.findIntersectInScene( event.clientX / window.innerWidth, event.clientY / window.innerHeight );
|
|
|
-
|
|
|
- var vector = projector.unprojectVector( new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.95 ), camera );
|
|
|
+ var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
|
|
|
|
|
|
+ /*
|
|
|
var particle = new THREE.Particle( new THREE.ParticleCircleMaterial( 0xff0000 ) );
|
|
|
particle.position = vector;
|
|
|
|
|
|
scene.addObject( particle );
|
|
|
- }
|
|
|
-
|
|
|
- function onDocumentMouseMove( event ) {
|
|
|
+ */
|
|
|
|
|
|
- mouseX = event.clientX / window.innerWidth;
|
|
|
- mouseY = event.clientY / window.innerHeight;
|
|
|
+ var intersects = ray.intersectScene( scene );
|
|
|
+ intersects.length && intersects[ 0 ].face.material[ 0 ].color.setHex( Math.random() * 0xffffff | 0x80000000 );
|
|
|
|
|
|
+ /*
|
|
|
+ // Parse all the faces
|
|
|
+ for ( var i in intersects ) {
|
|
|
+
|
|
|
+ intersects[ i ].face.material[ 0 ].color.setHex( Math.random() * 0xffffff | 0x80000000 );
|
|
|
+
|
|
|
+ }
|
|
|
+ */
|
|
|
}
|
|
|
|
|
|
var radius = 600;
|
|
@@ -217,11 +166,9 @@
|
|
|
|
|
|
theta += 0.2;
|
|
|
camera.position.x = radius * Math.sin( theta * Math.PI / 360 );
|
|
|
- // camera.position.y = radius * Math.sin( theta * Math.PI / 360 );
|
|
|
+ camera.position.y = radius * Math.sin( theta * Math.PI / 360 );
|
|
|
camera.position.z = radius * Math.cos( theta * Math.PI / 360 );
|
|
|
|
|
|
- // clickResolver.findIntersectInScene( mouseX, mouseY );
|
|
|
-
|
|
|
renderer.render(scene, camera);
|
|
|
stats.update();
|
|
|
}
|