@@ -381,9 +381,15 @@ function copyUniforms() {
381
381
let modelCentroidNull = null ;
382
382
let compilerSource = '' ;
383
383
function loadNewModel ( source ) {
384
- console . log ( "Compiling new model." ) ;
384
+ console . log ( 'Compiling new model.' ) ;
385
+ let firstRun = ( compilerSource == '' ) ;
385
386
compilerSource = source ;
386
387
uniformsChanged ( ) ;
388
+ let lookAt = getLookAt ( ) ;
389
+ controls . target0 = new THREE . Vector3 ( lookAt [ 0 ] , lookAt [ 1 ] , lookAt [ 2 ] ) ;
390
+ if ( firstRun ) {
391
+ viewCallbacks [ 6 ] ( ) ; // Reset to default view.
392
+ }
387
393
render ( ) ;
388
394
}
389
395
@@ -408,23 +414,32 @@ function rangeValuesChanged() {
408
414
const urz = rangeValues . urz ;
409
415
uniforms . u_ll . value . set ( llx , lly , llz ) ;
410
416
uniforms . u_ur . value . set ( urx , ury , urz ) ;
411
- let maxval = ( urx > ury ) ? ury : ury ;
412
- maxval = ( maxval > urz ) ? maxval : urz ;
417
+ let maxval = ( ( urx - llx ) > ( ury - lly ) ) ? ( urx - llx ) : ( ury - lly ) ;
418
+ maxval = ( maxval > ( urz - llz ) ) ? maxval : ( urz - llz ) ;
413
419
resetCameraD = maxval ;
420
+ // console.log('rangeValuesChanged: resetCameraD=' + resetCameraD.toString());
414
421
415
422
const ll = new THREE . Vector3 ( llx , lly , llz ) ;
416
423
const ur = new THREE . Vector3 ( urx , ury , urz ) ;
417
- const minD = - ll . length ( ) ;
418
- const maxD = ur . length ( ) ;
424
+ const lookAt = getLookAt ( ) ;
425
+ const center = new THREE . Vector3 ( lookAt [ 0 ] , lookAt [ 1 ] , lookAt [ 2 ] ) ;
426
+ const minD = - ( new THREE . Vector3 ( ) . subVectors ( center , ll ) ) . length ( ) ;
427
+ const maxD = ( new THREE . Vector3 ( ) . subVectors ( ur , center ) ) . length ( ) ;
419
428
let diagonal = maxD - minD ;
420
429
if ( diagonal <= 0.0 ) {
421
430
diagonal = 1.0 ; // Avoid divide-by-zero.
422
431
}
432
+ // console.log('rangeValuesChanged: minD=' + minD.toString() + ', maxD=' + maxD.toString() + ', diagonal=' + diagonal.toString());
423
433
424
434
scene . dispose ( ) ; // This alone is not enough. Need to create a brand new scene.
425
435
scene = new THREE . Scene ( ) ; // Eventually add a light?
426
436
427
437
modelCentroidNull = new THREE . Object3D ( )
438
+ modelCentroidNull . translateX ( lookAt [ 0 ] ) ;
439
+ modelCentroidNull . translateY ( lookAt [ 1 ] ) ;
440
+ modelCentroidNull . translateZ ( lookAt [ 2 ] ) ;
441
+ // console.log('rangeValuesChanged: modelCentroidNull.position=', modelCentroidNull.position);
442
+
428
443
scene . add ( modelCentroidNull ) ;
429
444
// modelCentroidNull.add(new THREE.AxesHelper(diagonal)); // for debugging
430
445
// TODO: make this a GUI option?
@@ -434,6 +449,7 @@ function rangeValuesChanged() {
434
449
for ( let d = minD + dStep ; d < maxD ; d += dStep ) {
435
450
let myUniforms = copyUniforms ( ) ;
436
451
myUniforms . u_d . value = ( d - minD ) / ( maxD - dStep - minD ) ;
452
+ // console.log('d=' + d.toString() + ', u_d=' + myUniforms.u_d.value.toString());
437
453
let material = new THREE . ShaderMaterial ( { uniforms : myUniforms , vertexShader : vs , fragmentShader : fsHeader + compilerSource , side : THREE . DoubleSide , transparent : true } ) ;
438
454
let plane = new THREE . PlaneBufferGeometry ( diagonal , diagonal ) ; // Should this always fill the viewport?
439
455
let mesh = new THREE . Mesh ( plane , material ) ;
@@ -462,20 +478,20 @@ const viewRotations = [[0, halfPi, 0], [0, -halfPi, 0], [-halfPi, 0, 0], [halfPi
462
478
[ quarterPi , 0 , quarterPi , 'ZYX' ] , [ - quarterPi , 0 , - quarterPi , 'ZYX' ] , [ - quarterPi , 0 , quarterPi , 'ZYX' ] , [ quarterPi , 0 , - quarterPi , 'ZYX' ] ,
463
479
[ - quarterPi , 0 , quarterPi , 'ZYX' ] , [ quarterPi , 0 , - quarterPi , 'ZYX' ] , [ quarterPi , 0 , quarterPi , 'ZYX' ] , [ - quarterPi , 0 , - quarterPi , 'ZYX' ] ] ;
464
480
const viewCallbacks = [
465
- function ( ) { toOrtho ( rightView ) ; controls . position0 . set ( resetCameraD , 0 , 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // right
466
- function ( ) { toOrtho ( leftView ) ; controls . position0 . set ( - resetCameraD , 0 , 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // left
467
- function ( ) { toOrtho ( backView ) ; controls . position0 . set ( 0 , resetCameraD , 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // back
468
- function ( ) { toOrtho ( frontView ) ; controls . position0 . set ( 0 , - resetCameraD , 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // front
469
- function ( ) { toOrtho ( topView ) ; controls . position0 . set ( 0 , 0 , resetCameraD ) ; controls . up0 . set ( 0 , 1 , 0 ) ; controls . reset ( ) ; } , // top
470
- function ( ) { toOrtho ( bottomView ) ; controls . position0 . set ( 0 , 0 , - resetCameraD ) ; controls . up0 . set ( 0 , - 1 , 0 ) ; controls . reset ( ) ; } , // bottom
471
- function ( ) { toPersp ( ) ; controls . position0 . set ( resetCameraD , - resetCameraD , resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
472
- function ( ) { toPersp ( ) ; controls . position0 . set ( resetCameraD , resetCameraD , resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
473
- function ( ) { toPersp ( ) ; controls . position0 . set ( - resetCameraD , resetCameraD , resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
474
- function ( ) { toPersp ( ) ; controls . position0 . set ( - resetCameraD , - resetCameraD , resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
475
- function ( ) { toPersp ( ) ; controls . position0 . set ( resetCameraD , - resetCameraD , - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
476
- function ( ) { toPersp ( ) ; controls . position0 . set ( resetCameraD , resetCameraD , - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
477
- function ( ) { toPersp ( ) ; controls . position0 . set ( - resetCameraD , resetCameraD , - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
478
- function ( ) { toPersp ( ) ; controls . position0 . set ( - resetCameraD , - resetCameraD , - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; }
481
+ function ( ) { toOrtho ( rightView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + resetCameraD , p [ 1 ] + 0 , p [ 2 ] + 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // right
482
+ function ( ) { toOrtho ( leftView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + - resetCameraD , p [ 1 ] + 0 , p [ 2 ] + 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // left
483
+ function ( ) { toOrtho ( backView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + 0 , p [ 1 ] + resetCameraD , p [ 2 ] + 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // back
484
+ function ( ) { toOrtho ( frontView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + 0 , p [ 1 ] + - resetCameraD , p [ 2 ] + 0 ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } , // front
485
+ function ( ) { toOrtho ( topView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + 0 , p [ 1 ] + 0 , p [ 2 ] + resetCameraD ) ; controls . up0 . set ( 0 , 1 , 0 ) ; controls . reset ( ) ; } , // top
486
+ function ( ) { toOrtho ( bottomView ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + 0 , p [ 1 ] + 0 , p [ 2 ] + - resetCameraD ) ; controls . up0 . set ( 0 , - 1 , 0 ) ; controls . reset ( ) ; } , // bottom
487
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + resetCameraD , p [ 1 ] + - resetCameraD , p [ 2 ] + resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
488
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + resetCameraD , p [ 1 ] + resetCameraD , p [ 2 ] + resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
489
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + - resetCameraD , p [ 1 ] + resetCameraD , p [ 2 ] + resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
490
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + - resetCameraD , p [ 1 ] + - resetCameraD , p [ 2 ] + resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
491
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + resetCameraD , p [ 1 ] + - resetCameraD , p [ 2 ] + - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
492
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + resetCameraD , p [ 1 ] + resetCameraD , p [ 2 ] + - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
493
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + - resetCameraD , p [ 1 ] + resetCameraD , p [ 2 ] + - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; } ,
494
+ function ( ) { toPersp ( ) ; let p = getLookAt ( ) ; controls . position0 . set ( p [ 0 ] + - resetCameraD , p [ 1 ] + - resetCameraD , p [ 2 ] + - resetCameraD ) ; controls . up0 . set ( 0 , 0 , 1 ) ; controls . reset ( ) ; }
479
495
] ;
480
496
481
497
function commonViewCalc ( left , right , top , bottom ) {
@@ -489,7 +505,7 @@ function commonViewCalc(left, right, top, bottom) {
489
505
frustumSize = fs * width / aspectRatio ;
490
506
resetCameraD = 0.5 * width ;
491
507
}
492
- // console.log('aspectRatio=' + aspectRatio.toString() + ', width=' + width.toString() + ', height=' + height.toString() + ', frustumSize=' + frustumSize.toString() + ', resetCameraD=' + resetCameraD.toString());
508
+ console . log ( 'commonViewCalc: aspectRatio=' + aspectRatio . toString ( ) + ', width=' + width . toString ( ) + ', height=' + height . toString ( ) + ', frustumSize=' + frustumSize . toString ( ) + ', resetCameraD=' + resetCameraD . toString ( ) ) ;
493
509
return {
494
510
left : - aspectRatio * frustumSize ,
495
511
right : aspectRatio * frustumSize ,
0 commit comments