Changeset 19853
- Timestamp:
- 12/03/15 21:57:22 (9 years ago)
- Location:
- issm/trunk-jpl/src/m/plot
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/plot/applyoptions.js
r19852 r19853 1 function applyoptions(md,data,options ){1 function applyoptions(md,data,options,canvas,gl,node){ 2 2 //APPLYOPTIONS - apply the options to current plot 3 3 // … … 143 143 var color; 144 144 var cheightoffset = options.getfieldvalue('colorbarfontsize',16); 145 var ccontext,ccanvas,ccanvasid ;145 var ccontext,ccanvas,ccanvasid,ccanvashtml; 146 146 ccanvasid = options.getfieldvalue('colorbarcanvasid',options.getfieldvalue('canvasid')+'_colorbar'); 147 147 ccanvashtml = document.getElementById(ccanvasid); 148 if (ccanvashtml==null){148 if (ccanvashtml==null) { 149 149 ccanvas = $('<canvas id="'+ccanvasid+'" width="'+String(cwidth+cheightoffset*4)+'" height="'+String(cheight+cheightoffset)+'"></canvas>').insertAfter('#'+options.getfieldvalue('canvasid')); 150 150 ccanvas.css({'position':'relative','top':((canvassize-cheight-cheightoffset)/-2).toFixed(2)+'px'}); … … 159 159 //get html object instead of jqurey object to modify height/width to accomodate labels 160 160 ccanvashtml.width = ccanvas.width()+cheightoffset*6; 161 ccanvas.css({'display':'inline-block'}); 162 ccanvashtml.height = canvassize; 161 ccanvashtml.height = cheight+cheightoffset; 163 162 ccanvashtml.cwidth = cwidth; 164 163 ccanvashtml.cheight = cheight; … … 175 174 } 176 175 var cgradient = ccontext.createLinearGradient(0,cheightoffset/2,0,cheight); 176 var tgradient = ccontext.createLinearGradient(0,0,0,256); 177 var cmap = options.getfieldvalue('cmap','jet'); 178 var colorbar = colorbars[cmap]; 177 179 for (var i = 0; i < colorbar.length; i++) { 178 180 color = colorbar[colorbar.length-i-1]; 179 181 color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)]; 180 182 cgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+',1.0)'); 183 tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+',1.0)'); 181 184 } 182 185 ccontext.fillStyle=cgradient; 183 186 ccontext.fillRect(0,cheightoffset/2,cwidth,cheight); 187 //Make texture canvas 188 var tcontext,tcanvas,tcanvasid,tcanvashtml,tURL; 189 tcanvasid = 'texturecanvas'; 190 var tcanvashtml = document.getElementById(tcanvasid); 191 if (tcanvashtml == null) { 192 tcanvas = $('<canvas id="texturecanvas" width="256" height="256"></canvas>').insertAfter(ccanvas); 193 tcanvas.css({'display':'none'}); 194 tcanvashtml = document.getElementById(tcanvasid); 195 } 196 else { 197 tcanvas = $('#' + tcanvasid); 198 } 199 tcontext = tcanvashtml.getContext('2d'); 200 tcontext.fillStyle = tgradient; 201 tcontext.fillRect(0,0,256,256); 202 tURL = tcanvashtml.toDataURL(); 203 node["texture"] = initTexture(gl,tURL); 184 204 //Draw colorbar border 185 205 ccontext.beginPath(); -
issm/trunk-jpl/src/m/plot/plot_manager.js
r19844 r19853 28 28 } 29 29 30 //Initialize the buffer structure: 31 var node = Node(gl,options); 32 30 33 //figure out if this is a special plot 31 34 if (typeof data === 'string'){ … … 92 95 case 'mesh': 93 96 //plot_mesh(md,options,nlines,ncols,i); 94 plot_mesh(md,options,canvas,gl );97 plot_mesh(md,options,canvas,gl,node); 95 98 break; 96 99 case 'none': … … 215 218 if (typeof data !== 'string'){ 216 219 //plot unit 217 plot_unit(md,data,options,canvas,gl );220 plot_unit(md,data,options,canvas,gl,node); 218 221 } 219 222 220 223 //applyoptions(md,data2,options); 221 applyoptions(md,data,options); 224 applyoptions(md,data,options,canvas,gl,node); 225 226 /*Draw into the canvas:*/ 227 draw(gl,options,canvas,node); 222 228 } -
issm/trunk-jpl/src/m/plot/plot_mesh.js
r19779 r19853 1 function plot_mesh(md,options,canvas,gl ) {1 function plot_mesh(md,options,canvas,gl,node) { 2 2 // Usage: 3 3 // plot_mesh(md,options,canvas,gl); … … 6 6 7 7 //declare variables: {{{ 8 var node;9 8 var vertices = []; 10 9 var indices = []; … … 22 21 //}}} 23 22 24 //Initialize the buffer structure:25 node = Node(gl,options);26 27 23 //Compute coordinates and data range: 28 24 xmin = ArrayMin(x); … … 35 31 //Compute scaling: 36 32 var scale = 1 / (xmax - xmin); 33 node["shaderName"] = "colored"; 37 34 node["scale"] = [scale, scale, scale]; 38 35 node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (-2 / scale)]; … … 107 104 node["arrays"] = [vertices, colors, indices]; 108 105 node["buffers"] = initBuffers(gl, node["arrays"]); 109 110 /*Draw into the canvas:*/111 draw(gl,options,canvas,node);112 106 } -
issm/trunk-jpl/src/m/plot/plot_unit.js
r19845 r19853 1 function plot_unit(md,data,options,canvas,gl ) {1 function plot_unit(md,data,options,canvas,gl,node) { 2 2 //PLOT_UNIT - unit plot, display data 3 3 // … … 8 8 9 9 //declare variables: {{{ 10 var node;11 10 var vertices = []; 12 11 var indices = []; 13 var colors = [];12 var texcoords = []; 14 13 var rgbcolor = []; 15 14 var xmin,xmax; … … 33 32 //}}} 34 33 35 //Initialize the buffer structure:36 node = Node(gl,options);37 38 39 34 //Compute coordinates and data range: 40 35 xmin = ArrayMin(x); … … 55 50 56 51 //some defaults: 57 colors.itemSize = 4;52 texcoords.itemSize = 2; 58 53 59 54 switch(datatype){ … … 109 104 vertices.itemSize = 3; 110 105 var cmap=options.getfieldvalue('cmap','jet'); 111 console.log(z[0]);106 112 107 for(var i = 0; i < x.length; i++){ 113 108 vertices[vertices.length] = x[i]; … … 115 110 vertices[vertices.length] = z[i]; 116 111 117 //handle mesh/qinterest size mismatch 118 rgbcolor = rgb(data[i], datamin, datamax,cmap); 119 colors[colors.length] = rgbcolor[0]; 120 colors[colors.length] = rgbcolor[1]; 121 colors[colors.length] = rgbcolor[2]; 122 colors[colors.length] = 1.0; 112 texcoords[texcoords.length] = 0.5; 113 texcoords[texcoords.length] = (data[i] - datamin) / (datamax - datamin); 123 114 } 124 115 125 116 //linearize the elements array: 126 117 indices = indices.concat.apply(indices, elements); … … 147 138 148 139 /*Initalize buffers: */ 149 node["buffers"] = initBuffers(gl,[vertices, colors, indices]); 150 151 /*Draw into the canvas:*/ 152 draw(gl,options,canvas,node); 140 node["buffers"] = initBuffers(gl,[vertices, texcoords, indices]); 153 141 } -
issm/trunk-jpl/src/m/plot/webgl.js
r19839 r19853 66 66 return bufferArray; 67 67 } //}}} 68 function createSolidTexture(gl, r, g, b, a) { 69 var data = new Uint8Array([r, g, b, a]); 70 var texture = gl.createTexture(); 71 gl.bindTexture(gl.TEXTURE_2D, texture); 72 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); 73 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 74 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 75 gl.bindTexture(gl.TEXTURE_2D, null); 76 return texture; 77 } 78 function initTexture(gl,imageSource) { //{{{ 79 var texture = gl.createTexture(); 80 texture.image = new Image(); 81 texture.image.onload = function () { 82 handleLoadedTexture(gl,texture); 83 } 84 texture.image.src = imageSource; 85 texture.isLoaded = true; 86 return texture; 87 } //}}} 88 function handleLoadedTexture(gl,texture) { //{{{ 89 gl.activeTexture(gl.TEXTURE0); 90 gl.bindTexture(gl.TEXTURE_2D, texture); 91 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); 92 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image); 93 gl.generateMipmap(gl.TEXTURE_2D); 94 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR); 95 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 96 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 97 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 98 gl.bindTexture(gl.TEXTURE_2D, null); 99 } //}}} 68 100 function Node(gl,options) { //{{{ 69 101 … … 71 103 72 104 node= {buffers:[], 73 shader:gl.shaders[" colored"]["program"],105 shader:gl.shaders["unlit_textured"]["program"], 74 106 draw:null, 75 107 hideOcean:false, … … 87 119 scale:vec3.fromValues(1, 1, 1), 88 120 modelMatrix:mat4.create(), 89 shaderName:" colored",121 shaderName:"unlit_textured", 90 122 }; 91 123 … … 120 152 var normalizedValue; 121 153 122 colorbar=colorbars[cmap];154 var colorbar=colorbars[cmap]; 123 155 124 156 value = clamp(value, min, max); … … 135 167 //{{{ Shader Loading 136 168 function loadShaders(gl) { //{{{ 137 // TODO: Subsitute shaders["colored"] with shaderColored 138 shaderName = "colored"; 169 var shaderNames = ["colored", "unlit_textured"]; 139 170 shaders = {}; 140 shaders[ shaderName] = {loaded:false, vsh:{}, fsh:{}};171 shaders["colored"] = {loaded:false, vsh:{}, fsh:{}}; 141 172 shaders["colored"]["vsh"]["string"] = 142 173 ['attribute vec3 aVertexPosition;', … … 160 191 ' gl_FragColor = vColor;', 161 192 '}'].join('\n'); 162 163 shaders[shaderName]["vsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["vsh"]["string"], "vsh"); 164 shaders[shaderName]["fsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["fsh"]["string"], "fsh"); 165 166 shaders[shaderName]["program"] = gl.createProgram(); 167 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["vsh"]["shader"]); 168 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["fsh"]["shader"]); 169 gl.linkProgram(shaders[shaderName]["program"]); 170 171 if (!gl.getProgramParameter(shaders[shaderName]["program"], gl.LINK_STATUS)) { 172 alert("Could not initialise shaders"); 173 } 174 175 var vshStringArray = shaders[shaderName]["vsh"]["string"].split("\n"); 176 var fshStringArray = shaders[shaderName]["fsh"]["string"].split("\n"); 177 var line = ""; 178 var property = ""; 179 for (var i = 0; i < vshStringArray.length; i++) { 180 line = vshStringArray[i]; 181 if (line.search("attribute") != -1) { 182 property = nameFromLine(line); 183 shaders[shaderName]["program"][property] = gl.getAttribLocation(shaders[shaderName]["program"], property); 184 } 185 else if (line.search("uniform") != -1) { 186 property = nameFromLine(line); 187 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 188 } 189 else if (line.search("void main") != -1) { 190 break; 191 } 192 } 193 for (var i = 0; i < fshStringArray.length; i++) { 194 line = fshStringArray[i]; 195 if (line.search("uniform") != -1) { 196 property = nameFromLine(line); 197 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 198 } 199 else if (line.search("void main") != -1) { 200 break; 201 } 202 } 203 shaders[shaderName]["loaded"] = true; 193 shaders["unlit_textured"] = {loaded:false, vsh:{}, fsh:{}}; 194 shaders["unlit_textured"]["vsh"]["string"] = 195 ['attribute vec3 aVertexPosition;', 196 'attribute vec2 aTextureCoord;', 197 '', 198 'uniform mat4 uMVPMatrix;', 199 '', 200 'varying vec2 vTextureCoord;', 201 '', 202 'void main(void) {', 203 ' gl_Position = uMVPMatrix * vec4(aVertexPosition.xyz, 1.0);', 204 ' vTextureCoord = aTextureCoord;', 205 '}'].join('\n'); 206 shaders["unlit_textured"]["fsh"]["string"] = 207 ['precision mediump float;', 208 '', 209 'varying vec2 vTextureCoord;', 210 '', 211 'uniform sampler2D uColorSampler;', 212 '', 213 'void main(void) {', 214 ' gl_FragColor = texture2D(uColorSampler, vec2(vTextureCoord.s, vTextureCoord.t));', 215 '}'].join('\n'); 216 shaderNames.forEach(function(shaderName){ 217 shaders[shaderName]["vsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["vsh"]["string"], "vsh"); 218 shaders[shaderName]["fsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["fsh"]["string"], "fsh"); 219 220 shaders[shaderName]["program"] = gl.createProgram(); 221 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["vsh"]["shader"]); 222 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["fsh"]["shader"]); 223 gl.linkProgram(shaders[shaderName]["program"]); 224 225 if (!gl.getProgramParameter(shaders[shaderName]["program"], gl.LINK_STATUS)) { 226 alert("Could not initialise shaders"); 227 } 228 229 var vshStringArray = shaders[shaderName]["vsh"]["string"].split("\n"); 230 var fshStringArray = shaders[shaderName]["fsh"]["string"].split("\n"); 231 var line = ""; 232 var property = ""; 233 for (var i = 0; i < vshStringArray.length; i++) { 234 line = vshStringArray[i]; 235 if (line.search("attribute") != -1) { 236 property = nameFromLine(line); 237 shaders[shaderName]["program"][property] = gl.getAttribLocation(shaders[shaderName]["program"], property); 238 } 239 else if (line.search("uniform") != -1) { 240 property = nameFromLine(line); 241 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 242 } 243 else if (line.search("void main") != -1) { 244 break; 245 } 246 } 247 for (var i = 0; i < fshStringArray.length; i++) { 248 line = fshStringArray[i]; 249 if (line.search("uniform") != -1) { 250 property = nameFromLine(line); 251 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 252 } 253 else if (line.search("void main") != -1) { 254 break; 255 } 256 } 257 shaders[shaderName]["loaded"] = true; 258 }); 204 259 return shaders; 205 260 } //}}} … … 269 324 gl.uniformMatrix4fv(node["shader"]["uMVPMatrix"], false, mvpMatrix); 270 325 gl.uniform1f(node["shader"]["uAlpha"], node["transparency"]); 326 if (node["texture"]) { 327 gl.activeTexture(gl.TEXTURE0); 328 gl.bindTexture(gl.TEXTURE_2D, node["texture"]); 329 gl.uniform1i(node["shader"]["uColorSampler"], 0); 330 } 271 331 if (node["useIndexBuffer"]) { 272 332 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, node["buffers"][node["buffers"].length - 1]); … … 304 364 window.requestAnimationFrame(function(time) {draw(gl,options,canvas,node)}); 305 365 updateCameraMatrix(canvas); 366 306 367 drawSceneGraphNode(gl, canvas, node); 307 308 368 } //}}} 309 369 //}}}
Note:
See TracChangeset
for help on using the changeset viewer.