Changeset 20771


Ignore:
Timestamp:
06/18/16 16:38:40 (9 years ago)
Author:
dlcheng
Message:

CHG (javascript): Additional improvements for webgl.js.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/plot/webgl.js

    r20770 r20771  
    4747        canvas.gl = gl;
    4848        canvas.zoomBounds = options.getfieldvalue('zoomlim',[0.001,100.0]);
    49         canvas.zoomFactor = clamp(options.getfieldvalue('zoom',1.0), canvas.zoomBounds[0], canvas.zoomBounds[1]);
    50         canvas.zoomLast = canvas.zoomFactor;
     49        canvas.zoom = clamp(options.getfieldvalue('zoom',1.0), canvas.zoomBounds[0], canvas.zoomBounds[1]);
     50        canvas.zoomLast = canvas.zoom;
    5151        canvas.cameraMatrix = mat4.create();
    5252        canvas.translation = options.getfieldvalue('origin',[0,0,0.0]);
    5353        canvas.rotationAzimuthBounds = options.getfieldvalue('azlim',[0,360]);
    5454        canvas.rotationElevationBounds = options.getfieldvalue('ellim',[-180,180]);
    55         canvas.rotationDefault = options.getfieldvalue('view',[0,90]); //0 azimuth - up is north, 90 elevation - looking straight down
    56         canvas.rotation = canvas.rotationDefault;
     55        canvas.view = options.getfieldvalue('view',[0,90]); //0 azimuth - up is north, 90 elevation - looking straight down
     56        canvas.rotation = canvas.view;
    5757        canvas.controlsensitivity = options.getfieldvalue('controlsensitivity',1);
    5858        canvas.twod = options.getfieldvalue('2d','off') == 'on';
     
    180180        return Math.max(min, Math.min(value, max));
    181181} //}}}
    182 function recoverview(canvasid,defaultview) { //{{{
     182function recover(canvasid,name,defaultvalue) { //{{{
    183183        var canvas  = document.getElementById(canvasid);
    184         if (canvas && canvas.hasOwnProperty("rotation")) {
    185                 return canvas.rotation;
    186         }
    187         return defaultview;
    188 } //}}}
    189 function recovercenteroffset(canvasid,defaultcenter) { //{{{
    190         var canvas  = document.getElementById(canvasid);
    191         if (canvas && canvas.hasOwnProperty("translation")) {
    192                 return canvas.translation;
    193         }
    194         return defaultcenter;
     184        if (canvas && canvas.hasOwnProperty(name)) {
     185                return canvas[name];
     186        }
     187        return defaultvalue;
    195188} //}}}
    196189//}}}
     
    339332        }
    340333        if (ev.srcEvent.shiftKey || ev.pointers.length == 2) {
    341                 var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoomFactor * -2 * canvas.controlsensitivity;
    342                 var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoomFactor * -2 * canvas.controlsensitivity;
     334                var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoom * -2 * canvas.controlsensitivity;
     335                var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoom * -2 * canvas.controlsensitivity;
    343336               
    344337                canvas.translation[0] += Math.cos(radians(canvas.rotation[0])) * deltaX - Math.sin(radians(canvas.rotation[0])) * deltaY;
     
    346339        }
    347340        else {
    348                 canvas.rotation[0] += degrees((canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoomFactor * -2 * canvas.controlsensitivity);
    349                 canvas.rotation[1] += degrees((canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoomFactor * -2 * canvas.controlsensitivity);
     341                canvas.rotation[0] += degrees((canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoom * -2 * canvas.controlsensitivity);
     342                canvas.rotation[1] += degrees((canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoom * -2 * canvas.controlsensitivity);
    350343               
    351344                if (canvas.rotation[0] > 360) {canvas.rotation[0] -= 360};
     
    365358        ev.preventDefault();
    366359        if (ev.type == 'pinchstart') {
    367                 canvas.zoomLast = canvas.zoomFactor;
     360                canvas.zoomLast = canvas.zoom;
    368361        }
    369362        else {
    370                 canvas.zoomFactor = clamp(ev.scale * canvas.zoomLast, canvas.zoomBounds[0], canvas.zoomBounds[1]);
    371                 if (displaylog) console.log(canvas.zoomFactor);
     363                canvas.zoom = clamp(ev.scale * canvas.zoomLast, canvas.zoomBounds[0], canvas.zoomBounds[1]);
     364                if (displaylog) console.log(canvas.zoom);
    372365        }
    373366} //}}}
    374367function onZoom(ev,canvas,displaylog) { //{{{
    375368        ev.preventDefault();
    376         var delta = clamp(clamp(ev.scale || ev.wheelDelta || -ev.detail, -1, 1) * canvas.controlsensitivity * canvas.zoomFactor / 20, -1.0, 1.0);
    377         canvas.zoomFactor = clamp(canvas.zoomFactor + delta, canvas.zoomBounds[0], canvas.zoomBounds[1]);
    378        
    379         if (displaylog) console.log(canvas.zoomFactor);
     369        var delta = clamp(clamp(ev.scale || ev.wheelDelta || -ev.detail, -1, 1) * canvas.controlsensitivity * canvas.zoom / 20, -1.0, 1.0);
     370        canvas.zoom = clamp(canvas.zoom + delta, canvas.zoomBounds[0], canvas.zoomBounds[1]);
     371       
     372        if (displaylog) console.log(canvas.zoom);
    380373} //}}}
    381374//}}}
     
    392385
    393386        if (canvas.twod) {
    394                 mat4.ortho(pMatrix, -1*aspectRatio/canvas.zoomFactor, 1*aspectRatio/canvas.zoomFactor, -1*aspectRatio/canvas.zoomFactor, 1*aspectRatio/canvas.zoomFactor, -1.0, 10000.0);
     387                mat4.ortho(pMatrix, -aspectRatio/canvas.zoom, aspectRatio/canvas.zoom, -1/canvas.zoom, 1/canvas.zoom, -1.0, 10000.0);
    395388        }
    396389        else {
     
    404397        //Calculate rotation around camera focal point about worldspace origin
    405398        if (canvas.twod) {
     399                mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, radians(0), [0, 1, 0]);
     400                mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, radians(90), [1, 0, 0]);
     401                mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
     402        }
     403        else {
    406404                mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, radians(canvas.rotation[0]), [0, 1, 0]);
    407405                mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, radians(canvas.rotation[1]), [1, 0, 0]);
    408406                mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
    409407        }
    410         else {
    411                 mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, radians(0), [0, 1, 0]);
    412                 mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, radians(90), [1, 0, 0]);
    413                 mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
    414         }
    415408       
    416409        //Apply rotation and scaling transform
     
    419412        //Apply screenspace translation
    420413        mat4.identity(translateMatrix);
    421         mat4.translate(translateMatrix, translateMatrix, [0.0, 0.0, -1/canvas.zoomFactor]);
     414        mat4.translate(translateMatrix, translateMatrix, [0.0, 0.0, -1/canvas.zoom]);
    422415        mat4.multiply(vMatrix, translateMatrix, vMatrix);
    423416
Note: See TracChangeset for help on using the changeset viewer.