UNPKG

webglimpse

Version:

Webglimpse is a data visualization library for the web.

74 lines 10.2 kB
/* * Copyright (c) 2014, Metron, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import { FloatDataTexture2D } from './texture'; // fills an array with jet colorscale values // webgl does not support 1D textures, so a 2D texture must be used export function jet(value) { const x = 4.0 * value; const r = clamp(1.5 - Math.abs(x - 3.0), 0, 1); const g = clamp(1.5 - Math.abs(x - 2.0), 0, 1); const b = clamp(1.5 - Math.abs(x - 1.0), 0, 1); return [r, g, b, 1.0]; } export function reverseBone(value) { const x = 1 - 0.875 * value; if (value < 0.375) { return [x, x, x - value / 3, 1]; } else if (value < 0.75) { return [x, x + 0.125 - value / 3, x - 0.125, 1]; } else { return [x + 0.375 - value * 0.5, x - 0.125, x - 0.125, 1]; } } export function getGradientTexture(gradient, size = 1024) { const array = new Float32Array(size * 4); for (let v = 0; v < size; v++) { const color = gradient(v / size); array[4 * v + 0] = color[0]; array[4 * v + 1] = color[1]; array[4 * v + 2] = color[2]; array[4 * v + 3] = color[3]; } return new FloatDataTexture2D(size, 1, array); } function clamp(n, min, max) { if (n < min) { return min; } else if (n > max) { return max; } else { return n; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViZ2xpbXBzZS9ncmFkaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE9BQU8sRUFBVyxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU14RCw0Q0FBNEM7QUFDNUMsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYTtJQUU3QixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBRXRCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFhO0lBRXJDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQzVCLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRTtRQUNmLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQ0ksSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkQ7U0FDSTtRQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzdEO0FBRUwsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFrQixFQUFFLE9BQWUsSUFBSTtJQUN0RSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRWpDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDOUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO1FBQ1QsT0FBTyxHQUFHLENBQUM7S0FDZDtTQUNJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNkLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7U0FDSTtRQUNELE9BQU8sQ0FBQyxDQUFDO0tBQ1o7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBNZXRyb24sIEluYy5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICpcclxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG4gKlxyXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAqXHJcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuICpcclxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnNcclxuICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcclxuICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqL1xyXG5pbXBvcnQgeyBUZXh0dXJlLCBGbG9hdERhdGFUZXh0dXJlMkQgfSBmcm9tICcuL3RleHR1cmUnO1xyXG5cclxuLy8gdmFsdWU6IGEgbnVtYmVyIGZyb20gMC0xXHJcbi8vIG91dDogZm91ciBjb21wb25lbnQgUkdCQSBhcnJheSBpbmRpY2F0aW5nIHRoZSBncmFkaWVudCBjb2xvciBmb3IgdGhlIGlucHV0IGZyYWN0aW9uXHJcbmV4cG9ydCB0eXBlIEdyYWRpZW50ID0gKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcltdO1xyXG5cclxuLy8gZmlsbHMgYW4gYXJyYXkgd2l0aCBqZXQgY29sb3JzY2FsZSB2YWx1ZXNcclxuLy8gd2ViZ2wgZG9lcyBub3Qgc3VwcG9ydCAxRCB0ZXh0dXJlcywgc28gYSAyRCB0ZXh0dXJlIG11c3QgYmUgdXNlZFxyXG5leHBvcnQgZnVuY3Rpb24gamV0KHZhbHVlOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcblxyXG4gICAgY29uc3QgeCA9IDQuMCAqIHZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHIgPSBjbGFtcCgxLjUgLSBNYXRoLmFicyh4IC0gMy4wKSwgMCwgMSk7XHJcbiAgICBjb25zdCBnID0gY2xhbXAoMS41IC0gTWF0aC5hYnMoeCAtIDIuMCksIDAsIDEpO1xyXG4gICAgY29uc3QgYiA9IGNsYW1wKDEuNSAtIE1hdGguYWJzKHggLSAxLjApLCAwLCAxKTtcclxuXHJcbiAgICByZXR1cm4gW3IsIGcsIGIsIDEuMF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlQm9uZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyW10ge1xyXG5cclxuICAgIGNvbnN0IHggPSAxIC0gMC44NzUgKiB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSA8IDAuMzc1KSB7XHJcbiAgICAgICAgcmV0dXJuIFt4LCB4LCB4IC0gdmFsdWUgLyAzLCAxXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZhbHVlIDwgMC43NSkge1xyXG4gICAgICAgIHJldHVybiBbeCwgeCArIDAuMTI1IC0gdmFsdWUgLyAzLCB4IC0gMC4xMjUsIDFdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFt4ICsgMC4zNzUgLSB2YWx1ZSAqIDAuNSwgeCAtIDAuMTI1LCB4IC0gMC4xMjUsIDFdO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYWRpZW50VGV4dHVyZShncmFkaWVudDogR3JhZGllbnQsIHNpemU6IG51bWJlciA9IDEwMjQpOiBUZXh0dXJlIHtcclxuICAgIGNvbnN0IGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogNCk7XHJcblxyXG4gICAgZm9yIChsZXQgdiA9IDA7IHYgPCBzaXplOyB2KyspIHtcclxuICAgICAgICBjb25zdCBjb2xvciA9IGdyYWRpZW50KHYgLyBzaXplKTtcclxuXHJcbiAgICAgICAgYXJyYXlbNCAqIHYgKyAwXSA9IGNvbG9yWzBdO1xyXG4gICAgICAgIGFycmF5WzQgKiB2ICsgMV0gPSBjb2xvclsxXTtcclxuICAgICAgICBhcnJheVs0ICogdiArIDJdID0gY29sb3JbMl07XHJcbiAgICAgICAgYXJyYXlbNCAqIHYgKyAzXSA9IGNvbG9yWzNdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgRmxvYXREYXRhVGV4dHVyZTJEKHNpemUsIDEsIGFycmF5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKG4gPCBtaW4pIHtcclxuICAgICAgICByZXR1cm4gbWluO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobiA+IG1heCkge1xyXG4gICAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH1cclxufVxyXG4iXX0=