123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /**
- * @author simonThiele / https://github.com/simonThiele
- */
- module( "Raycaster" );
- test( "intersectObjects", function() {
- var raycaster = getRaycaster();
- var objectsToCheck = getObjectsToCheck();
- ok ( raycaster.intersectObjects( objectsToCheck ).length === 1,
- "no recursive search should lead to one hit" );
- ok ( raycaster.intersectObjects( objectsToCheck, true ).length === 3,
- "recursive search should lead to three hits" );
- var intersections = raycaster.intersectObjects( objectsToCheck, true );
- for ( var i = 0; i < intersections.length - 1; i++ ) {
- ok( intersections[ i ].distance <= intersections[ i + 1 ].distance, "intersections are sorted" );
- }
- });
- test( "intersectObject", function() {
- var raycaster = getRaycaster();
- var objectsToCheck = getObjectsToCheck();
- ok ( raycaster.intersectObject( objectsToCheck[ 0 ] ).length === 1,
- "no recursive search should lead to one hit" );
- ok ( raycaster.intersectObject( objectsToCheck[ 0 ], true ).length === 3,
- "recursive search should lead to three hits" );
- var intersections = raycaster.intersectObject( objectsToCheck[ 0 ], true );
- for ( var i = 0; i < intersections.length - 1; i++ ) {
- ok( intersections[ i ].distance <= intersections[ i + 1 ].distance, "intersections are sorted" );
- }
- });
- test( "setFromCamera", function() {
- var raycaster = new THREE.Raycaster();
- var rayDirection = raycaster.ray.direction;
- var camera = new THREE.PerspectiveCamera( 90, 1, 1, 1000 );
- raycaster.setFromCamera( { x : 0, y: 0 }, camera );
- ok( rayDirection.x === 0, rayDirection.y === 0, rayDirection.z === -1,
- "camera is looking straight to -z and so does the ray in the middle of the screen" );
- var step = 0.1;
- for ( var x = -1; x <= 1; x += step ) {
- for ( var y = -1; y <= 1; y += step ) {
- raycaster.setFromCamera( { x, y }, camera );
- var refVector = new THREE.Vector3( x, y, -1 ).normalize();
- checkRayDirectionAgainstReferenceVector( rayDirection, refVector );
- }
- }
- });
- function checkRayDirectionAgainstReferenceVector( rayDirection, refVector ) {
- ok( refVector.x - rayDirection.x <= Number.EPSILON &&
- refVector.y - rayDirection.y <= Number.EPSILON &&
- refVector.z - rayDirection.z <= Number.EPSILON,
- "camera is pointing to the same direction as expected" );
- }
- function getRaycaster() {
- return raycaster = new THREE.Raycaster(
- new THREE.Vector3( 0, 0, 0 ),
- new THREE.Vector3( 0, 0, -1 ),
- 1,
- 100
- );
- }
- function getObjectsToCheck() {
- var objects = [];
- var sphere1 = getSphere();
- sphere1.position.set( 0, 0, -10 );
- sphere1.name = 1;
- objects.push( sphere1 );
- var sphere11 = getSphere();
- sphere11.position.set( 0, 0, 1 );
- sphere11.name = 11;
- sphere1.add( sphere11 );
- var sphere12 = getSphere();
- sphere12.position.set( 0, 0, -1 );
- sphere12.name = 12;
- sphere1.add( sphere12 );
- var sphere2 = getSphere();
- sphere2.position.set( -5, 0, -5 );
- sphere2.name = 2;
- objects.push( sphere2 );
- for ( var i = 0; i < objects.length; i++ ) {
- objects[ i ].updateMatrixWorld();
- }
- return objects;
- }
- function getSphere() {
- return new THREE.Mesh( new THREE.SphereGeometry( 1, 100, 100 ) );
- }
|