提交 1c26dd25 编写于 作者: M Mr.doob

Fixed collisions examples.

上级 28c165f8
此差异已折叠。
...@@ -44,7 +44,8 @@ body { ...@@ -44,7 +44,8 @@ body {
<script type="text/javascript"> <script type="text/javascript">
var scene, camera, renderer, info, mouse2d, sun, cube; var camera, scene, projector, renderer,
info, mouse = { x: 0, y: 0 }, sun, cube;
var bounce = 0; var bounce = 0;
...@@ -57,10 +58,11 @@ function init() { ...@@ -57,10 +58,11 @@ function init() {
camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = -500; camera.position.z = -500;
mouse2d = new THREE.Vector3( 0, 0, 1 );
scene = new THREE.Scene(); scene = new THREE.Scene();
projector = new THREE.Projector();
renderer = new THREE.WebGLRenderer(); renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild(renderer.domElement); container.appendChild(renderer.domElement);
...@@ -101,9 +103,8 @@ function createCube( s, p ) { ...@@ -101,9 +103,8 @@ function createCube( s, p ) {
function onDocumentMouseMove( event ) { function onDocumentMouseMove( event ) {
event.preventDefault(); event.preventDefault();
mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1; mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1; mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
mouse2d.z = 1;
}; };
...@@ -111,19 +112,16 @@ function animate() { ...@@ -111,19 +112,16 @@ function animate() {
requestAnimationFrame( animate ); requestAnimationFrame( animate );
var r = new THREE.Ray(); info.innerHTML = "";
r.origin.copy( mouse2d );
var matrix = camera.matrixWorld.clone(); var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix ) ); projector.unprojectVector( vector, camera );
matrix.multiplyVector3( r.origin );
r.direction = r.origin.clone().subSelf( camera.position );
info.innerHTML = ""; var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var c = THREE.Collisions.rayCastNearest( r ); var c = THREE.Collisions.rayCastNearest( ray );
if( c ) { if ( c ) {
info.innerHTML += "Found @ distance " + c.distance.toFixed(2); info.innerHTML += "Found @ distance " + c.distance.toFixed(2);
c.mesh.materials[ 0 ].color.setHex( 0xaa0000 ); c.mesh.materials[ 0 ].color.setHex( 0xaa0000 );
......
...@@ -45,18 +45,15 @@ body { ...@@ -45,18 +45,15 @@ body {
<script type="text/javascript"> <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 meshes = [];
var theta = 0; var theta = 0;
var camdist = 1500; var camdist = 1500;
var totalFaces = 0; var totalFaces = 0, totalColliders = 0;
var totalColliders = 0;
var ray = new THREE.Ray();
var matrix = new THREE.Matrix4(),
matrix2 = new THREE.Matrix4();
function init() { function init() {
...@@ -67,12 +64,13 @@ function init() { ...@@ -67,12 +64,13 @@ function init() {
camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = camdist; camera.position.z = camdist;
mouse2d = new THREE.Vector3( 0, 0, 1 );
loader = new THREE.JSONLoader( ); loader = new THREE.JSONLoader( );
scene = new THREE.Scene(); scene = new THREE.Scene();
projector = new THREE.Projector();
renderer = new THREE.WebGLRenderer(); renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement ); container.appendChild( renderer.domElement );
...@@ -152,7 +150,7 @@ function loadCube(p) { ...@@ -152,7 +150,7 @@ function loadCube(p) {
addCube( new THREE.Vector3( 0, -sy, -sz*2), geometry ); addCube( new THREE.Vector3( 0, -sy, -sz*2), geometry );
addCube( new THREE.Vector3( sx,-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) { ...@@ -186,9 +184,8 @@ function addCube( p, g) {
function onDocumentMouseMove( event ) { function onDocumentMouseMove( event ) {
event.preventDefault(); event.preventDefault();
mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1; mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1; mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
mouse2d.z = 1;
}; };
...@@ -197,15 +194,6 @@ function animate() { ...@@ -197,15 +194,6 @@ function animate() {
requestAnimationFrame( 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; if( meshes.length == 0 ) return;
var i, l = meshes.length; var i, l = meshes.length;
...@@ -216,6 +204,10 @@ function animate() { ...@@ -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 ); var c = THREE.Collisions.rayCastNearest( ray );
......
...@@ -45,18 +45,15 @@ body { ...@@ -45,18 +45,15 @@ body {
<script type="text/javascript"> <script type="text/javascript">
var scene, camera, renderer, info, mouse2d, sun, loader, stats, line; var camera, scene, projector, renderer,
info, mouse = { x: 0, y: 0 }, sun, loader, stats, line;
var meshes = []; var meshes = [];
var theta = 0; var theta = 0;
var camdist = 500; var camdist = 500;
var totalFaces = 0; var totalFaces = 0, totalColliders = 0;
var totalColliders = 0;
var ray = new THREE.Ray();
var matrix = new THREE.Matrix4(),
matrix2 = new THREE.Matrix4();
function init() { function init() {
...@@ -67,12 +64,13 @@ function init() { ...@@ -67,12 +64,13 @@ function init() {
camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); camera = new THREE.Camera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = camdist; camera.position.z = camdist;
mouse2d = new THREE.Vector3( 0, 0, 1 );
loader = new THREE.JSONLoader( ); loader = new THREE.JSONLoader( );
scene = new THREE.Scene(); scene = new THREE.Scene();
projector = new THREE.Projector();
renderer = new THREE.WebGLRenderer(); renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement ); container.appendChild( renderer.domElement );
...@@ -139,9 +137,8 @@ function addCube( p, g) { ...@@ -139,9 +137,8 @@ function addCube( p, g) {
function onDocumentMouseMove( event ) { function onDocumentMouseMove( event ) {
event.preventDefault(); event.preventDefault();
mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1; mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1; mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
mouse2d.z = 1;
}; };
...@@ -149,20 +146,13 @@ function onDocumentMouseMove( event ) { ...@@ -149,20 +146,13 @@ function onDocumentMouseMove( event ) {
function animate() { function animate() {
requestAnimationFrame( animate ); requestAnimationFrame( animate );
ray.origin.copy( mouse2d );
matrix.copy( camera.matrixWorld ); var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix, matrix2 ) ); projector.unprojectVector( vector, camera );
matrix.multiplyVector3( ray.origin );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
ray.direction.copy( ray.origin );
ray.direction.subSelf( camera.position );
//var ray2 = new THREE.Ray();
//ray2.origin = ray.origin.clone();
if( meshes.length == 0 ) return; if ( meshes.length == 0 ) return;
var i, l = meshes.length; var i, l = meshes.length;
......
...@@ -48,23 +48,26 @@ ...@@ -48,23 +48,26 @@
<script type="text/javascript"> <script type="text/javascript">
var scene, camera, renderer, info, mouse2d, sun; var camera, scene, projector, renderer,
info, mouse = { x: 0, y: 0 }, sun;
var theta = 0; var theta = 0;
var camdist = 1500; var camdist = 1500;
var geoms = []; var geoms = [];
function init(){ function init () {
container = document.createElement('div'); container = document.createElement('div');
document.body.appendChild(container); document.body.appendChild(container);
info = document.getElementById("info"); info = document.getElementById("info");
camera = new THREE.Camera(40, window.innerWidth / window.innerHeight, 1, 10000); camera = new THREE.Camera(40, window.innerWidth / window.innerHeight, 1, 10000);
mouse2d = new THREE.Vector3(0, 0, 1);
scene = new THREE.Scene(); scene = new THREE.Scene();
projector = new THREE.Projector();
renderer = new THREE.WebGLRenderer(); renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight); renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement); container.appendChild(renderer.domElement);
...@@ -137,23 +140,23 @@ ...@@ -137,23 +140,23 @@
} }
function onDocumentMouseMove(event){ function onDocumentMouseMove(event){
event.preventDefault(); event.preventDefault();
mouse2d.x = (event.clientX / window.innerWidth) * 2 - 1; mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse2d.y = -(event.clientY / window.innerHeight) * 2 + 1; mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
mouse2d.z = 1;
} }
function animate(){ function animate(){
requestAnimationFrame(animate);
var r = new THREE.Ray(); requestAnimationFrame( animate );
r.origin = mouse2d.clone();
var matrix = camera.matrixWorld.clone();
matrix.multiplySelf(THREE.Matrix4.makeInvert(camera.projectionMatrix));
matrix.multiplyVector3(r.origin);
r.direction = r.origin.clone().subSelf(camera.position);
for (var i = 0; i < geoms.length; i++) { 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() );
for ( var i = 0; i < geoms.length; i++) {
geoms[i].materials[0].color = new THREE.Color(0x007700); geoms[i].materials[0].color = new THREE.Color(0x007700);
} }
...@@ -162,14 +165,14 @@ ...@@ -162,14 +165,14 @@
// Raycast all // Raycast all
ts = new Date().getTime(); ts = new Date().getTime();
var cs = THREE.Collisions.rayCastAll( r ); var cs = THREE.Collisions.rayCastAll( ray );
tt = new Date().getTime() - ts; tt = new Date().getTime() - ts;
if ( cs.length > 0 ) { if ( cs.length > 0 ) {
info.innerHTML = cs.length + " colliders found in " + tt; info.innerHTML = cs.length + " colliders found in " + tt;
for ( var i = 0; i < cs.length; i++ ) { for ( var i = 0; i < cs.length; i ++ ) {
cs[ i ].mesh.materials[ 0 ].color.setHex( 0xaa0000 ); cs[ i ].mesh.materials[ 0 ].color.setHex( 0xaa0000 );
...@@ -186,7 +189,7 @@ ...@@ -186,7 +189,7 @@
// Raycast nearest // Raycast nearest
ts = new Date().getTime(); ts = new Date().getTime();
var c = THREE.Collisions.rayCastNearest( r ); var c = THREE.Collisions.rayCastNearest( ray );
tt = new Date().getTime() - ts; tt = new Date().getTime() - ts;
if ( c ) { if ( c ) {
...@@ -211,7 +214,8 @@ ...@@ -211,7 +214,8 @@
renderer.render( scene, camera ); renderer.render( scene, camera );
stats.update(); stats.update();
} }
function vts(v){ function vts(v){
......
...@@ -43,15 +43,14 @@ body { ...@@ -43,15 +43,14 @@ body {
<script type="text/javascript"> <script type="text/javascript">
var scene, camera, renderer, info, mouse2d, sun, loader, sphere, ray; var camera, scene, renderer,
info, mouse2d, sun, loader, sphere, ray;
var theta = 0; var theta = 0, radius = 250, speed = 0.002, sphereSize = 4;
var radius = 250;
var speed = 0.0015;
var sphereSize = 4;
function init() { function init() {
container = document.createElement( 'div' ); container = document.createElement( 'div' );
document.body.appendChild( container ); document.body.appendChild( container );
...@@ -71,7 +70,6 @@ function init() { ...@@ -71,7 +70,6 @@ function init() {
sphere = new THREE.Mesh( new THREE.SphereGeometry( sphereSize, 10, 10 ), new THREE.MeshLambertMaterial( { color: 0xff0000 } ) ); sphere = new THREE.Mesh( new THREE.SphereGeometry( sphereSize, 10, 10 ), new THREE.MeshLambertMaterial( { color: 0xff0000 } ) );
scene.addObject(sphere); scene.addObject(sphere);
camera.target = sphere;
renderer = new THREE.WebGLRenderer(); renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setSize( window.innerWidth, window.innerHeight );
...@@ -123,11 +121,10 @@ function animate() { ...@@ -123,11 +121,10 @@ function animate() {
//info.innerHTML = "No intersection"; //info.innerHTML = "No intersection";
} }
theta += speed; theta += speed;
camera.target.position.copy( sphere.position );
renderer.render( scene, camera ); renderer.render( scene, camera );
} }
......
...@@ -50,14 +50,11 @@ ...@@ -50,14 +50,11 @@
<script type="text/javascript"> <script type="text/javascript">
var scene, camera, renderer, info, mouse2d, sun, loader, sphere; var camera, scene, renderer, info, mouse2d, sun, loader, sphere;
var range = 400; var range = 400, speed = 1, sphereSize = 4;
var speed = 1;
var sphereSize = 4;
var cubes = [];
var cubes = [];
function init(){ function init(){
container = document.createElement('div'); container = document.createElement('div');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册