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

Updated builds.

上级 59ccf9b5
......@@ -7594,33 +7594,24 @@ THREE.Object3D.prototype = {
getObjectById: function ( id, recursive ) {
if ( this.id === id ) return this;
return this.getObjectByProperty( 'id', id, recursive );
for ( var i = 0, l = this.children.length; i < l; i ++ ) {
var child = this.children[ i ];
var object = child.getObjectById( id, recursive );
if ( object !== undefined ) {
return object;
}
},
}
getObjectByName: function ( name, recursive ) {
return undefined;
return this.getObjectByProperty( 'name', name, recursive );
},
getObjectByName: function ( name, recursive ) {
getObjectByProperty: function ( name, value, recursive ) {
if ( this.name === name ) return this;
if ( this[ name ] === value ) return this;
for ( var i = 0, l = this.children.length; i < l; i ++ ) {
var child = this.children[ i ];
var object = child.getObjectByName( name, recursive );
var object = child.getObjectByProperty( name, value, recursive );
if ( object !== undefined ) {
......@@ -14757,17 +14748,105 @@ THREE.Line.prototype.raycast = ( function () {
inverseMatrix.getInverse( this.matrixWorld );
ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );
/* if ( geometry instanceof THREE.BufferGeometry ) {
var vStart = new THREE.Vector3();
var vEnd = new THREE.Vector3();
var interSegment = new THREE.Vector3();
var interRay = new THREE.Vector3();
var step = this.mode === THREE.LineStrip ? 1 : 2;
if ( geometry instanceof THREE.BufferGeometry ) {
var attributes = geometry.attributes;
if ( attributes.index !== undefined ) {
var indices = attributes.index.array;
var positions = attributes.position.array;
var offsets = geometry.offsets;
if ( offsets.length === 0 ) {
offsets = [ { start: 0, count: indices.length, index: 0 } ];
}
for ( var oi = 0; oi < offsets.length; oi++){
var start = offsets[ oi ].start;
var count = offsets[ oi ].count;
var index = offsets[ oi ].index;
for ( var i = start; i < start + count - 1; i += step ) {
var a = index + indices[ i ];
var b = index + indices[ i + 1 ];
vStart.fromArray( positions, a * 3 );
vEnd.fromArray( positions, b * 3 );
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
} else */ if ( geometry instanceof THREE.Geometry ) {
if ( distSq > precisionSq ) continue;
var distance = ray.origin.distanceTo( interRay );
if ( distance < raycaster.near || distance > raycaster.far ) continue;
intersects.push( {
distance: distance,
// What do we want? intersection point on the ray or on the segment??
// point: raycaster.ray.at( distance ),
point: interSegment.clone().applyMatrix4( this.matrixWorld ),
face: null,
faceIndex: null,
object: this
} );
}
}
} else {
var positions = attributes.position.array;
for ( var i = 0; i < positions.length / 3 - 1; i += step ) {
vStart.fromArray( positions, 3 * i );
vEnd.fromArray( positions, 3 * i + 3 );
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
if ( distSq > precisionSq ) continue;
var distance = ray.origin.distanceTo( interRay );
if ( distance < raycaster.near || distance > raycaster.far ) continue;
intersects.push( {
distance: distance,
// What do we want? intersection point on the ray or on the segment??
// point: raycaster.ray.at( distance ),
point: interSegment.clone().applyMatrix4( this.matrixWorld ),
face: null,
faceIndex: null,
object: this
} );
}
}
} else if ( geometry instanceof THREE.Geometry ) {
var vertices = geometry.vertices;
var nbVertices = vertices.length;
var interSegment = new THREE.Vector3();
var interRay = new THREE.Vector3();
var step = this.mode === THREE.LineStrip ? 1 : 2;
for ( var i = 0; i < nbVertices - 1; i = i + step ) {
for ( var i = 0; i < nbVertices - 1; i += step ) {
var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );
......@@ -27132,14 +27211,15 @@ THREE.AudioListener.prototype.updateMatrixWorld = ( function () {
THREE.Object3D.prototype.updateMatrixWorld.call( this, force );
var listener = this.context.listener;
var up = this.up;
this.matrixWorld.decompose( position, quaternion, scale );
orientation.set( 0, 0, -1 ).applyQuaternion( quaternion );
velocity.subVectors( position, positionPrev );
listener.setPosition( position.x, position.y, position.z );
listener.setOrientation( orientation.x, orientation.y, orientation.z, this.up.x, this.up.y, this.up.z );
listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );
listener.setVelocity( velocity.x, velocity.y, velocity.z );
positionPrev.copy( position );
......
此差异已折叠。
......@@ -21,8 +21,6 @@ THREE.AudioListener.prototype.updateMatrixWorld = ( function () {
var quaternion = new THREE.Quaternion();
var scale = new THREE.Vector3();
var up = this.up;
var orientation = new THREE.Vector3();
var velocity = new THREE.Vector3();
......@@ -33,6 +31,7 @@ THREE.AudioListener.prototype.updateMatrixWorld = ( function () {
THREE.Object3D.prototype.updateMatrixWorld.call( this, force );
var listener = this.context.listener;
var up = this.up;
this.matrixWorld.decompose( position, quaternion, scale );
......
......@@ -49,7 +49,7 @@ THREE.Line.prototype.raycast = ( function () {
inverseMatrix.getInverse( this.matrixWorld );
ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );
var vStart = new THREE.Vector3();
var vEnd = new THREE.Vector3();
var interSegment = new THREE.Vector3();
......@@ -57,43 +57,43 @@ THREE.Line.prototype.raycast = ( function () {
var step = this.mode === THREE.LineStrip ? 1 : 2;
if ( geometry instanceof THREE.BufferGeometry ) {
var attributes = geometry.attributes;
if ( attributes.index !== undefined) {
if ( attributes.index !== undefined ) {
var indices = attributes.index.array;
var positions = attributes.position.array;
var offsets = geometry.offsets;
if ( offsets.length === 0 ) {
offsets = [ { start: 0, count: indices.length, index: 0 } ];
}
for ( var oi = 0; oi < offsets.length; oi++){
var start = offsets[ oi ].start;
var count = offsets[ oi ].count;
var index = offsets[ oi ].index;
var index = offsets[ oi ].index;
for ( var i = start; i < start + count - 1; i += step ) {
var a = index + indices[ i ];
var b = index + indices[ i + 1 ];
vStart.fromArray( positions, a * 3 );
vEnd.fromArray( positions, b * 3 );
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
if ( distSq > precisionSq ) continue;
var distance = ray.origin.distanceTo( interRay );
if ( distance < raycaster.near || distance > raycaster.far ) continue;
intersects.push( {
distance: distance,
......@@ -105,28 +105,28 @@ THREE.Line.prototype.raycast = ( function () {
object: this
} );
}
}
} else {
var positions = attributes.position.array;
for ( var i = 0; i < positions.length / 3 - 1; i += step) {
for ( var i = 0; i < positions.length / 3 - 1; i += step ) {
vStart.fromArray( positions, 3 * i );
vEnd.fromArray( positions, 3 * i + 3 );
var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
if ( distSq > precisionSq ) continue;
var distance = ray.origin.distanceTo( interRay );
if ( distance < raycaster.near || distance > raycaster.far ) continue;
intersects.push( {
distance: distance,
......@@ -138,9 +138,9 @@ THREE.Line.prototype.raycast = ( function () {
object: this
} );
}
}
} else if ( geometry instanceof THREE.Geometry ) {
......@@ -148,7 +148,7 @@ THREE.Line.prototype.raycast = ( function () {
var vertices = geometry.vertices;
var nbVertices = vertices.length;
for ( var i = 0; i < nbVertices - 1; i = i + step ) {
for ( var i = 0; i < nbVertices - 1; i += step ) {
var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册