|
@@ -44,7 +44,6 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
return function raycast( raycaster, intersects ) {
|
|
|
|
|
|
var precision = raycaster.linePrecision;
|
|
|
- var precisionSq = precision * precision;
|
|
|
|
|
|
var geometry = this.geometry;
|
|
|
var matrixWorld = this.matrixWorld;
|
|
@@ -54,8 +53,8 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
|
|
|
|
|
|
sphere.copy( geometry.boundingSphere );
|
|
|
- sphere.radius += precision;
|
|
|
- sphere.applyMatrix4( matrixWorld );
|
|
|
+ sphere.applyMatrix4( matrixWorld );
|
|
|
+ sphere.radius += precision;
|
|
|
|
|
|
if ( raycaster.ray.intersectsSphere( sphere ) === false ) return;
|
|
|
|
|
@@ -64,6 +63,9 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
inverseMatrix.getInverse( matrixWorld );
|
|
|
ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );
|
|
|
|
|
|
+ var localPrecision = 3 * precision / ( this.scale.x + this.scale.y + this.scale.z );
|
|
|
+ var localPrecisionSq = localPrecision * localPrecision;
|
|
|
+
|
|
|
var vStart = new Vector3();
|
|
|
var vEnd = new Vector3();
|
|
|
var interSegment = new Vector3();
|
|
@@ -90,7 +92,7 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
|
|
|
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
|
|
|
|
|
|
- if ( distSq > precisionSq ) continue;
|
|
|
+ if ( distSq > localPrecisionSq ) continue;
|
|
|
|
|
|
interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation
|
|
|
|
|
@@ -122,7 +124,7 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
|
|
|
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
|
|
|
|
|
|
- if ( distSq > precisionSq ) continue;
|
|
|
+ if ( distSq > localPrecisionSq ) continue;
|
|
|
|
|
|
interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation
|
|
|
|
|
@@ -156,7 +158,7 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
|
|
|
var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );
|
|
|
|
|
|
- if ( distSq > precisionSq ) continue;
|
|
|
+ if ( distSq > localPrecisionSq ) continue;
|
|
|
|
|
|
interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation
|
|
|
|