@@ -3000,18 +3000,18 @@ THREE.Vector4.prototype = {
3000
3000
m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
3001
3001
m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
3002
3002
3003
- if ( ( Math.abs( m12 - m21 ) < epsilon )
3004
- && ( Math.abs( m13 - m31 ) < epsilon )
3005
- && ( Math.abs( m23 - m32 ) < epsilon ) ) {
3003
+ if ( ( Math.abs( m12 - m21 ) < epsilon ) &&
3004
+ ( Math.abs( m13 - m31 ) < epsilon ) &&
3005
+ ( Math.abs( m23 - m32 ) < epsilon ) ) {
3006
3006
3007
3007
// singularity found
3008
3008
// first check for identity matrix which must have +1 for all terms
3009
3009
// in leading diagonal and zero in other terms
3010
3010
3011
- if ( ( Math.abs( m12 + m21 ) < epsilon2 )
3012
- && ( Math.abs( m13 + m31 ) < epsilon2 )
3013
- && ( Math.abs( m23 + m32 ) < epsilon2 )
3014
- && ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
3011
+ if ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&
3012
+ ( Math.abs( m13 + m31 ) < epsilon2 ) &&
3013
+ ( Math.abs( m23 + m32 ) < epsilon2 ) &&
3014
+ ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
3015
3015
3016
3016
// this singularity is identity matrix so angle = 0
3017
3017
@@ -3096,9 +3096,9 @@ THREE.Vector4.prototype = {
3096
3096
3097
3097
// as we have reached here there are no singularities so we can handle normally
3098
3098
3099
- var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 )
3100
- + ( m13 - m31 ) * ( m13 - m31 )
3101
- + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
3099
+ var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +
3100
+ ( m13 - m31 ) * ( m13 - m31 ) +
3101
+ ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
3102
3102
3103
3103
if ( Math.abs( s ) < 0.001 ) s = 1;
3104
3104
@@ -6026,7 +6026,7 @@ THREE.Ray.prototype = {
6026
6026
// else t0 is in front of the ray, so return the first collision point scaled by t0
6027
6027
return this.at( t0, optionalTarget );
6028
6028
6029
- }
6029
+ };
6030
6030
6031
6031
}(),
6032
6032
@@ -23319,7 +23319,8 @@ THREE.SkinnedMesh = function ( geometry, material, useVertexTexture ) {
23319
23319
23320
23320
gbone = this.geometry.bones[ b ];
23321
23321
23322
- if ( gbone.parent !== - 1 && gbone.parent !== null ) {
23322
+ if ( gbone.parent !== - 1 && gbone.parent !== null &&
23323
+ bones[ gbone.parent ] !== undefined ) {
23323
23324
23324
23325
bones[ gbone.parent ].add( bones[ b ] );
23325
23326
@@ -23468,14 +23469,6 @@ THREE.LOD = function () {
23468
23469
levels: {
23469
23470
enumerable: true,
23470
23471
value: []
23471
- },
23472
- objects: {
23473
- get: function () {
23474
-
23475
- console.warn( 'THREE.LOD: .objects has been renamed to .levels.' );
23476
- return this.levels;
23477
-
23478
- }
23479
23472
}
23480
23473
} );
23481
23474
@@ -31339,54 +31332,48 @@ THREE.WebGLUniforms = ( function() { // scope
31339
31332
31340
31333
// --- Utilities ---
31341
31334
31342
- // Array Cache (provides arrays for temporary use by type and size)
31343
-
31344
- arrayCaches = [],
31345
- arrayCacheTypes = [],
31346
-
31347
- allocTemporaryArray = function( type, size ) {
31335
+ // Array Caches (provide typed arrays for temporary by size)
31348
31336
31349
- var typeIndex = arrayCacheTypes.indexOf( type );
31337
+ arrayCacheF32 = [],
31338
+ arrayCacheI32 = [],
31350
31339
31351
- if ( typeIndex === - 1 ) {
31352
-
31353
- typeIndex = arrayCacheTypes.length;
31354
- arrayCacheTypes.push( type );
31355
- arrayCaches.push( [] );
31340
+ uncacheTemporaryArrays = function() {
31356
31341
31357
- }
31342
+ arrayCacheF32.length = 0;
31343
+ arrayCacheI32.length = 0;
31358
31344
31359
- var arrayCache = arrayCaches[ typeIndex ],
31360
- cachedArray = arrayCache[ size ];
31345
+ },
31361
31346
31362
- if ( cachedArray === undefined ) {
31347
+ // Flattening for arrays of vectors and matrices
31363
31348
31364
- cachedArray = new type( size );
31365
- arrayCache[ size ] = cachedArray;
31349
+ flatten = function( array, nBlocks, blockSize ) {
31366
31350
31367
- }
31351
+ var firstElem = array[ 0 ];
31368
31352
31369
- return cachedArray;
31353
+ if ( firstElem <= 0 || firstElem > 0 ) return array;
31354
+ // unoptimized: ! isNaN( firstElem )
31355
+ // see http://jacksondunstan.com/articles/983
31370
31356
31371
- },
31357
+ var n = nBlocks * blockSize,
31358
+ r = arrayCacheF32[ n ];
31372
31359
31373
- uncacheTemporaryArrays = function( ) {
31360
+ if ( r === undefined ) {
31374
31361
31375
- arrayCaches.length = 0 ;
31376
- arrayCacheTypes.length = 0 ;
31362
+ r = new Float32Array( n ) ;
31363
+ arrayCacheF32[ n ] = r ;
31377
31364
31378
- },
31365
+ }
31379
31366
31380
- // Flattening for arrays of vectors and matrices
31367
+ if ( nBlocks !== 0 ) {
31381
31368
31382
- flatten = function( array, stride ) {
31369
+ firstElem.toArray( r, 0 );
31383
31370
31384
- var n = array.length,
31385
- r = allocTemporaryArray( Float32Array, n * stride );
31371
+ for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {
31386
31372
31387
- for ( var i = 0, offset = 0; i !== n; ++ i, offset += stride ) {
31373
+ offset += blockSize;
31374
+ array[ i ].toArray( r, offset );
31388
31375
31389
- array[ i ].toArray( r, offset );
31376
+ }
31390
31377
31391
31378
}
31392
31379
@@ -31398,7 +31385,14 @@ THREE.WebGLUniforms = ( function() { // scope
31398
31385
31399
31386
allocTexUnits = function( renderer, n ) {
31400
31387
31401
- var r = allocTemporaryArray( Int32Array, n );
31388
+ var r = arrayCacheI32[ n ];
31389
+
31390
+ if ( r === undefined ) {
31391
+
31392
+ r = new Int32Array( n );
31393
+ arrayCacheI32[ n ] = r;
31394
+
31395
+ }
31402
31396
31403
31397
for ( var i = 0; i !== n; ++ i )
31404
31398
r[ i ] = renderer.allocTextureUnit();
@@ -31524,45 +31518,39 @@ THREE.WebGLUniforms = ( function() { // scope
31524
31518
31525
31519
setValueV2a = function( gl, v ) {
31526
31520
31527
- if ( v.length === this.size ) v = flatten( v, 2 );
31528
- gl.uniform2fv( this.addr, v );
31521
+ gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );
31529
31522
31530
31523
},
31531
31524
31532
31525
setValueV3a = function( gl, v ) {
31533
31526
31534
- if ( v.length === this.size ) v = flatten( v, 3 );
31535
- gl.uniform3fv( this.addr, v );
31527
+ gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );
31536
31528
31537
31529
},
31538
31530
31539
31531
setValueV4a = function( gl, v ) {
31540
31532
31541
- if ( v.length === this.size ) v = flatten( v, 4 );
31542
- gl.uniform4fv( this.addr, v );
31533
+ gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );
31543
31534
31544
31535
},
31545
31536
31546
31537
// Array of matrices (flat or from THREE clases)
31547
31538
31548
31539
setValueM2a = function( gl, v ) {
31549
31540
31550
- if ( v.length === this.size ) v = flatten( v, 4 );
31551
- gl.uniformMatrix2fv( this.addr, false, v );
31541
+ gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );
31552
31542
31553
31543
},
31554
31544
31555
31545
setValueM3a = function( gl, v ) {
31556
31546
31557
- if ( v.length === this.size ) v = flatten( v, 9 );
31558
- gl.uniformMatrix3fv( this.addr, false, v );
31547
+ gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );
31559
31548
31560
31549
},
31561
31550
31562
31551
setValueM4a = function( gl, v ) {
31563
31552
31564
- if ( v.length === this.size ) v = flatten( v, 16 );
31565
- gl.uniformMatrix4fv( this.addr, false, v );
31553
+ gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );
31566
31554
31567
31555
},
31568
31556
@@ -33470,6 +33458,19 @@ THREE.CanvasRenderer = function () {
33470
33458
33471
33459
THREE.MeshFaceMaterial = THREE.MultiMaterial;
33472
33460
33461
+ //
33462
+
33463
+ Object.defineProperties( THREE.LOD.prototype, {
33464
+ objects: {
33465
+ get: function () {
33466
+
33467
+ console.warn( 'THREE.LOD: .objects has been renamed to .levels.' );
33468
+ return this.levels;
33469
+
33470
+ }
33471
+ }
33472
+ } );
33473
+
33473
33474
// File:src/extras/CurveUtils.js
33474
33475
33475
33476
/**
0 commit comments