{"version":3,"file":"gaussian-splats-3d.umd.cjs","sources":["../src/SplatBuffer.js","../src/Util.js","../src/PlyParser.js","../src/PlyLoader.js","../src/SplatLoader.js","../src/OrbitControls.js","../src/LoadingSpinner.js","../src/ArrowHelper.js","../src/SceneHelper.js","../src/raycaster/Ray.js","../src/raycaster/Hit.js","../src/raycaster/Raycaster.js","../src/splattree/SplatTreeNode.js","../src/splattree/SplatTree.js","../src/SplatMesh.js","../src/worker/sorter.wasm","../src/Constants.js","../src/worker/SortWorker.js","../src/Viewer.js"],"sourcesContent":["import * as THREE from 'three';\r\n\r\nconst tempVector3A = new THREE.Vector3();\r\nconst tempVector3B = new THREE.Vector3();\r\nconst tempVector4A = new THREE.Vector4();\r\nconst tempVector4B = new THREE.Vector4();\r\nconst tempQuaternion4A = new THREE.Quaternion();\r\nconst tempQuaternion4B = new THREE.Quaternion();\r\n\r\nlet fbf;\r\nlet tbf;\r\n\r\nexport class SplatBuffer {\r\n\r\n    static PositionComponentCount = 3;\r\n    static ScaleComponentCount = 3;\r\n    static RotationComponentCount = 4;\r\n    static ColorComponentCount = 4;\r\n\r\n    static CompressionLevels = {\r\n        0: {\r\n            BytesPerPosition: 12,\r\n            BytesPerScale: 12,\r\n            BytesPerColor: 4,\r\n            BytesPerRotation: 16,\r\n            ScaleRange: 1\r\n        },\r\n        1: {\r\n            BytesPerPosition: 6,\r\n            BytesPerScale: 6,\r\n            BytesPerColor: 4,\r\n            BytesPerRotation: 8,\r\n            ScaleRange: 32767\r\n        }\r\n    };\r\n\r\n    static CovarianceSizeFloats = 6;\r\n    static CovarianceSizeBytes = 24;\r\n\r\n    static HeaderSizeBytes = 1024;\r\n\r\n    constructor(bufferData) {\r\n        this.headerBufferData = new ArrayBuffer(SplatBuffer.HeaderSizeBytes);\r\n        this.headerArrayUint8 = new Uint8Array(this.headerBufferData);\r\n        this.headerArrayUint32 = new Uint32Array(this.headerBufferData);\r\n        this.headerArrayFloat32 = new Float32Array(this.headerBufferData);\r\n        this.headerArrayUint8.set(new Uint8Array(bufferData, 0, SplatBuffer.HeaderSizeBytes));\r\n        this.versionMajor = this.headerArrayUint8[0];\r\n        this.versionMinor = this.headerArrayUint8[1];\r\n        this.headerExtraK = this.headerArrayUint8[2];\r\n        this.compressionLevel = this.headerArrayUint8[3];\r\n        this.splatCount = this.headerArrayUint32[1];\r\n        this.bucketSize = this.headerArrayUint32[2];\r\n        this.bucketCount = this.headerArrayUint32[3];\r\n        this.bucketBlockSize = this.headerArrayFloat32[4];\r\n        this.halfBucketBlockSize = this.bucketBlockSize / 2.0;\r\n        this.bytesPerBucket = this.headerArrayUint32[5];\r\n        this.compressionScaleRange = this.headerArrayUint32[6] || SplatBuffer.CompressionLevels[this.compressionLevel].ScaleRange;\r\n        this.compressionScaleFactor = this.halfBucketBlockSize / this.compressionScaleRange;\r\n\r\n        const dataBufferSizeBytes = bufferData.byteLength - SplatBuffer.HeaderSizeBytes;\r\n        this.splatBufferData = new ArrayBuffer(dataBufferSizeBytes);\r\n        new Uint8Array(this.splatBufferData).set(new Uint8Array(bufferData, SplatBuffer.HeaderSizeBytes, dataBufferSizeBytes));\r\n\r\n        this.bytesPerPosition = SplatBuffer.CompressionLevels[this.compressionLevel].BytesPerPosition;\r\n        this.bytesPerScale = SplatBuffer.CompressionLevels[this.compressionLevel].BytesPerScale;\r\n        this.bytesPerColor = SplatBuffer.CompressionLevels[this.compressionLevel].BytesPerColor;\r\n        this.bytesPerRotation = SplatBuffer.CompressionLevels[this.compressionLevel].BytesPerRotation;\r\n\r\n        this.bytesPerSplat = this.bytesPerPosition + this.bytesPerScale + this.bytesPerColor + this.bytesPerRotation;\r\n\r\n        fbf = this.fbf.bind(this);\r\n        tbf = this.tbf.bind(this);\r\n\r\n        this.linkBufferArrays();\r\n    }\r\n\r\n    linkBufferArrays() {\r\n        let FloatArray = (this.compressionLevel === 0) ? Float32Array : Uint16Array;\r\n        this.positionArray = new FloatArray(this.splatBufferData, 0, this.splatCount * SplatBuffer.PositionComponentCount);\r\n        this.scaleArray = new FloatArray(this.splatBufferData, this.bytesPerPosition * this.splatCount,\r\n                                         this.splatCount * SplatBuffer.ScaleComponentCount);\r\n        this.colorArray = new Uint8Array(this.splatBufferData, (this.bytesPerPosition + this.bytesPerScale) * this.splatCount,\r\n                                         this.splatCount * SplatBuffer.ColorComponentCount);\r\n        this.rotationArray = new FloatArray(this.splatBufferData,\r\n                                             (this.bytesPerPosition + this.bytesPerScale + this.bytesPerColor) * this.splatCount,\r\n                                              this.splatCount * SplatBuffer.RotationComponentCount);\r\n        this.bucketsBase = this.splatCount * this.bytesPerSplat;\r\n    }\r\n\r\n    fbf(f) {\r\n        if (this.compressionLevel === 0) {\r\n            return f;\r\n        } else {\r\n            return THREE.DataUtils.fromHalfFloat(f);\r\n        }\r\n    };\r\n\r\n    tbf(f) {\r\n        if (this.compressionLevel === 0) {\r\n            return f;\r\n        } else {\r\n            return THREE.DataUtils.toHalfFloat(f);\r\n        }\r\n    };\r\n\r\n    getHeaderBufferData() {\r\n        return this.headerBufferData;\r\n    }\r\n\r\n    getSplatBufferData() {\r\n        return this.splatBufferData;\r\n    }\r\n\r\n    getPosition(index, outPosition = new THREE.Vector3()) {\r\n        let bucket = [0, 0, 0];\r\n        const positionBase = index * SplatBuffer.PositionComponentCount;\r\n        if (this.compressionLevel > 0) {\r\n            const sf = this.compressionScaleFactor;\r\n            const sr = this.compressionScaleRange;\r\n            const bucketIndex = Math.floor(index / this.bucketSize);\r\n            bucket = new Float32Array(this.splatBufferData, this.bucketsBase + bucketIndex * this.bytesPerBucket, 3);\r\n            outPosition.x = (this.positionArray[positionBase] - sr) * sf + bucket[0];\r\n            outPosition.y = (this.positionArray[positionBase + 1] - sr) * sf + bucket[1];\r\n            outPosition.z = (this.positionArray[positionBase + 2] - sr) * sf + bucket[2];\r\n        } else {\r\n            outPosition.x = this.positionArray[positionBase];\r\n            outPosition.y = this.positionArray[positionBase + 1];\r\n            outPosition.z = this.positionArray[positionBase + 2];\r\n        }\r\n        return outPosition;\r\n    }\r\n\r\n    setPosition(index, position) {\r\n        let bucket = [0, 0, 0];\r\n        const positionBase = index * SplatBuffer.PositionComponentCount;\r\n        if (this.compressionLevel > 0) {\r\n            const sf = 1.0 / this.compressionScaleFactor;\r\n            const sr = this.compressionScaleRange;\r\n            const maxR = sr * 2 + 1;\r\n            const bucketIndex = Math.floor(index / this.bucketSize);\r\n            bucket = new Float32Array(this.splatBufferData, this.bucketsBase + bucketIndex * this.bytesPerBucket, 3);\r\n            this.positionArray[positionBase] = clamp(Math.round((position.x - bucket[0]) * sf) + sr, 0, maxR);\r\n            this.positionArray[positionBase + 1] = clamp(Math.round((position.y - bucket[1]) * sf) + sr, 0, maxR);\r\n            this.positionArray[positionBase + 2] = clamp(Math.round((position.z - bucket[2]) * sf) + sr, 0, maxR);\r\n        } else {\r\n            this.positionArray[positionBase] = position.x;\r\n            this.positionArray[positionBase + 1] = position.y;\r\n            this.positionArray[positionBase + 2] = position.z;\r\n        }\r\n    }\r\n\r\n    getScale(index, outScale = new THREE.Vector3()) {\r\n        const scaleBase = index * SplatBuffer.ScaleComponentCount;\r\n        outScale.set(fbf(this.scaleArray[scaleBase]), fbf(this.scaleArray[scaleBase + 1]), fbf(this.scaleArray[scaleBase + 2]));\r\n        return outScale;\r\n    }\r\n\r\n    setScale(index, scale) {\r\n        const scaleBase = index * SplatBuffer.ScaleComponentCount;\r\n        this.scaleArray[scaleBase] = tbf(scale.x);\r\n        this.scaleArray[scaleBase + 1] = tbf(scale.y);\r\n        this.scaleArray[scaleBase + 2] = tbf(scale.z);\r\n    }\r\n\r\n    getRotation(index, outRotation = new THREE.Quaternion()) {\r\n        const rotationBase = index * SplatBuffer.RotationComponentCount;\r\n        outRotation.set(fbf(this.rotationArray[rotationBase + 1]), fbf(this.rotationArray[rotationBase + 2]),\r\n                        fbf(this.rotationArray[rotationBase + 3]), fbf(this.rotationArray[rotationBase]));\r\n        return outRotation;\r\n    }\r\n\r\n    setRotation(index, rotation) {\r\n        const rotationBase = index * SplatBuffer.RotationComponentCount;\r\n        this.rotationArray[rotationBase] = tbf(rotation.w);\r\n        this.rotationArray[rotationBase + 1] = tbf(rotation.x);\r\n        this.rotationArray[rotationBase + 2] = tbf(rotation.y);\r\n        this.rotationArray[rotationBase + 3] = tbf(rotation.z);\r\n    }\r\n\r\n    getColor(index, outColor = new THREE.Vector4()) {\r\n        const colorBase = index * SplatBuffer.ColorComponentCount;\r\n        outColor.set(this.colorArray[colorBase], this.colorArray[colorBase + 1],\r\n                     this.colorArray[colorBase + 2], this.colorArray[colorBase + 3]);\r\n        return outColor;\r\n    }\r\n\r\n    setColor(index, color) {\r\n        const colorBase = index * SplatBuffer.ColorComponentCount;\r\n        this.colorArray[colorBase] = color.x;\r\n        this.colorArray[colorBase + 1] = color.y;\r\n        this.colorArray[colorBase + 2] = color.z;\r\n        this.colorArray[colorBase + 3] = color.w;\r\n    }\r\n\r\n    getSplatCount() {\r\n        return this.splatCount;\r\n    }\r\n\r\n    fillCovarianceArray(covarianceArray) {\r\n        const splatCount = this.splatCount;\r\n\r\n        const scale = new THREE.Vector3();\r\n        const rotation = new THREE.Quaternion();\r\n        const rotationMatrix = new THREE.Matrix3();\r\n        const scaleMatrix = new THREE.Matrix3();\r\n        const covarianceMatrix = new THREE.Matrix3();\r\n        const tempMatrix4 = new THREE.Matrix4();\r\n\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const scaleBase = i * SplatBuffer.ScaleComponentCount;\r\n            scale.set(fbf(this.scaleArray[scaleBase]), fbf(this.scaleArray[scaleBase + 1]), fbf(this.scaleArray[scaleBase + 2]));\r\n            tempMatrix4.makeScale(scale.x, scale.y, scale.z);\r\n            scaleMatrix.setFromMatrix4(tempMatrix4);\r\n\r\n            const rotationBase = i * SplatBuffer.RotationComponentCount;\r\n            rotation.set(fbf(this.rotationArray[rotationBase + 1]),\r\n                         fbf(this.rotationArray[rotationBase + 2]),\r\n                         fbf(this.rotationArray[rotationBase + 3]),\r\n                         fbf(this.rotationArray[rotationBase]));\r\n            tempMatrix4.makeRotationFromQuaternion(rotation);\r\n            rotationMatrix.setFromMatrix4(tempMatrix4);\r\n\r\n            covarianceMatrix.copy(rotationMatrix).multiply(scaleMatrix);\r\n            const M = covarianceMatrix.elements;\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i] = M[0] * M[0] + M[3] * M[3] + M[6] * M[6];\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i + 1] = M[0] * M[1] + M[3] * M[4] + M[6] * M[7];\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i + 2] = M[0] * M[2] + M[3] * M[5] + M[6] * M[8];\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i + 3] = M[1] * M[1] + M[4] * M[4] + M[7] * M[7];\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i + 4] = M[1] * M[2] + M[4] * M[5] + M[7] * M[8];\r\n            covarianceArray[SplatBuffer.CovarianceSizeFloats * i + 5] = M[2] * M[2] + M[5] * M[5] + M[8] * M[8];\r\n        }\r\n    }\r\n\r\n    fillPositionArray(outPositionArray) {\r\n        const splatCount = this.splatCount;\r\n        let bucket = [0, 0, 0];\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const positionBase = i * SplatBuffer.PositionComponentCount;\r\n            if (this.compressionLevel > 0) {\r\n                const bucketIndex = Math.floor(i / this.bucketSize);\r\n                bucket = new Float32Array(this.splatBufferData, this.bucketsBase + bucketIndex * this.bytesPerBucket, 3);\r\n                const sf = this.compressionScaleFactor;\r\n                const sr = this.compressionScaleRange;\r\n                outPositionArray[positionBase] = (this.positionArray[positionBase] - sr) * sf + bucket[0];\r\n                outPositionArray[positionBase + 1] = (this.positionArray[positionBase + 1] - sr) * sf + bucket[1];\r\n                outPositionArray[positionBase + 2] = (this.positionArray[positionBase + 2] - sr) * sf + bucket[2];\r\n            } else {\r\n                outPositionArray[positionBase] = this.positionArray[positionBase];\r\n                outPositionArray[positionBase + 1] = this.positionArray[positionBase + 1];\r\n                outPositionArray[positionBase + 2] = this.positionArray[positionBase + 2];\r\n            }\r\n        }\r\n    }\r\n\r\n    fillScaleArray(outScaleArray) {\r\n        const fbf = this.fbf.bind(this);\r\n        const splatCount = this.splatCount;\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const scaleBase = i * SplatBuffer.ScaleComponentCount;\r\n            outScaleArray[scaleBase] = fbf(this.scaleArray[scaleBase]);\r\n            outScaleArray[scaleBase + 1] = fbf(this.scaleArray[scaleBase + 1]);\r\n            outScaleArray[scaleBase + 2] = fbf(this.scaleArray[scaleBase + 2]);\r\n        }\r\n    }\r\n\r\n    fillRotationArray(outRotationArray) {\r\n        const fbf = this.fbf.bind(this);\r\n        const splatCount = this.splatCount;\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const rotationBase = i * SplatBuffer.RotationComponentCount;\r\n            outRotationArray[rotationBase] = fbf(this.rotationArray[rotationBase]);\r\n            outRotationArray[rotationBase + 1] = fbf(this.rotationArray[rotationBase + 1]);\r\n            outRotationArray[rotationBase + 2] = fbf(this.rotationArray[rotationBase + 2]);\r\n            outRotationArray[rotationBase + 3] = fbf(this.rotationArray[rotationBase + 3]);\r\n        }\r\n    }\r\n\r\n    fillColorArray(outColorArray) {\r\n        const splatCount = this.splatCount;\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const colorBase = i * SplatBuffer.ColorComponentCount;\r\n            outColorArray[colorBase] = this.colorArray[colorBase];\r\n            outColorArray[colorBase + 1] = this.colorArray[colorBase + 1];\r\n            outColorArray[colorBase + 2] = this.colorArray[colorBase + 2];\r\n            outColorArray[colorBase + 3] = this.colorArray[colorBase + 3];\r\n        }\r\n    }\r\n\r\n    swapVertices(indexA, indexB) {\r\n\r\n        this.getPosition(indexA, tempVector3A);\r\n        this.getPosition(indexB, tempVector3B);\r\n        this.setPosition(indexB, tempVector3A);\r\n        this.setPosition(indexA, tempVector3B);\r\n\r\n        this.getScale(indexA, tempVector3A);\r\n        this.getScale(indexB, tempVector3B);\r\n        this.setScale(indexB, tempVector3A);\r\n        this.setScale(indexA, tempVector3B);\r\n\r\n        this.getRotation(indexA, tempQuaternion4A);\r\n        this.getRotation(indexB, tempQuaternion4B);\r\n        this.setRotation(indexB, tempQuaternion4A);\r\n        this.setRotation(indexA, tempQuaternion4B);\r\n\r\n        this.getColor(indexA, tempVector4A);\r\n        this.getColor(indexB, tempVector4B);\r\n        this.setColor(indexB, tempVector4A);\r\n        this.setColor(indexA, tempVector4B);\r\n\r\n    }\r\n\r\n}\r\n","export const floatToHalf = function() {\r\n\r\n    const floatView = new Float32Array(1);\r\n    const int32View = new Int32Array(floatView.buffer);\r\n\r\n    return function(val) {\r\n        floatView[0] = val;\r\n        const x = int32View[0];\r\n\r\n        let bits = (x >> 16) & 0x8000;\r\n        let m = (x >> 12) & 0x07ff;\r\n        const e = (x >> 23) & 0xff;\r\n\r\n        if (e < 103) return bits;\r\n\r\n        if (e > 142) {\r\n            bits |= 0x7c00;\r\n            bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\r\n            return bits;\r\n        }\r\n\r\n        if (e < 113) {\r\n            m |= 0x0800;\r\n            bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\r\n            return bits;\r\n        }\r\n\r\n        bits |= (( e - 112) << 10) | (m >> 1);\r\n        bits += m & 1;\r\n        return bits;\r\n    };\r\n\r\n}();\r\n\r\nexport const uintEncodedFloat = function() {\r\n\r\n    const floatView = new Float32Array(1);\r\n    const int32View = new Int32Array(floatView.buffer);\r\n\r\n    return function(f) {\r\n        floatView[0] = f;\r\n        return int32View[0];\r\n    };\r\n\r\n}();\r\n\r\nexport const rgbaToInteger = function(r, g, b, a) {\r\n    return r + (g << 8) + (b << 16) + (a << 24);\r\n};\r\n\r\nexport const fetchWithProgress = function(path, onProgress) {\r\n\r\n    return new Promise((resolve, reject) => {\r\n        fetch(path)\r\n        .then(async (data) => {\r\n            const reader = data.body.getReader();\r\n            let bytesDownloaded = 0;\r\n            let _fileSize = data.headers.get('Content-Length');\r\n            let fileSize = _fileSize ? parseInt(_fileSize) : undefined;\r\n\r\n            const chunks = [];\r\n\r\n            while (true) {\r\n                try {\r\n                    const { value: chunk, done } = await reader.read();\r\n                    if (done) {\r\n                        if (onProgress) {\r\n                            onProgress(100, '100%', chunk);\r\n                        }\r\n                        const buffer = new Blob(chunks).arrayBuffer();\r\n                        resolve(buffer);\r\n                        break;\r\n                    }\r\n                    bytesDownloaded += chunk.length;\r\n                    let percent;\r\n                    let percentLabel;\r\n                    if (fileSize !== undefined) {\r\n                        percent = bytesDownloaded / fileSize * 100;\r\n                        percentLabel = `${percent.toFixed(2)}%`;\r\n                    }\r\n                    chunks.push(chunk);\r\n                    if (onProgress) {\r\n                        onProgress(percent, percentLabel, chunk);\r\n                    }\r\n                } catch (error) {\r\n                    reject(error);\r\n                    break;\r\n                }\r\n            }\r\n        });\r\n    });\r\n\r\n};\r\n\r\nexport const clamp = function(val, min, max) {\r\n    return Math.max(Math.min(val, max), min);\r\n};\r\n\r\nexport const getCurrentTime = function() {\r\n    return performance.now() / 1000;\r\n};\r\n","import { SplatBuffer } from './SplatBuffer.js';\r\nimport { clamp } from './Util.js';\r\nimport * as THREE from 'three';\r\n\r\nconst SplatBufferBucketSize = 256;\r\nconst SplatBufferBucketBlockSize = 5.0;\r\n\r\nexport class PlyParser {\r\n\r\n    constructor(plyBuffer) {\r\n        this.plyBuffer = plyBuffer;\r\n    }\r\n\r\n    decodeHeader(plyBuffer) {\r\n        const decoder = new TextDecoder();\r\n        let headerOffset = 0;\r\n        let headerText = '';\r\n\r\n        console.log('.PLY size: ' + plyBuffer.byteLength + ' bytes');\r\n\r\n        const readChunkSize = 100;\r\n\r\n        while (true) {\r\n            if (headerOffset + readChunkSize >= plyBuffer.byteLength) {\r\n                throw new Error('End of file reached while searching for end of header');\r\n            }\r\n            const headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\r\n            headerText += decoder.decode(headerChunk);\r\n            headerOffset += readChunkSize;\r\n\r\n            const endHeaderTestChunk = new Uint8Array(plyBuffer, Math.max(0, headerOffset - readChunkSize * 2), readChunkSize * 2);\r\n            const endHeaderTestText = decoder.decode(endHeaderTestChunk);\r\n            if (endHeaderTestText.includes('end_header')) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        const headerLines = headerText.split('\\n');\r\n\r\n        let splatCount = 0;\r\n        let propertyTypes = {};\r\n\r\n        for (let i = 0; i < headerLines.length; i++) {\r\n            const line = headerLines[i].trim();\r\n            if (line.startsWith('element vertex')) {\r\n                const splatCountMatch = line.match(/\\d+/);\r\n                if (splatCountMatch) {\r\n                    splatCount = parseInt(splatCountMatch[0]);\r\n                }\r\n            } else if (line.startsWith('property')) {\r\n                const propertyMatch = line.match(/(\\w+)\\s+(\\w+)\\s+(\\w+)/);\r\n                if (propertyMatch) {\r\n                    const propertyType = propertyMatch[2];\r\n                    const propertyName = propertyMatch[3];\r\n                    propertyTypes[propertyName] = propertyType;\r\n                }\r\n            } else if (line === 'end_header') {\r\n                break;\r\n            }\r\n        }\r\n\r\n        const vertexByteOffset = headerText.indexOf('end_header') + 'end_header'.length + 1;\r\n        const vertexData = new DataView(plyBuffer, vertexByteOffset);\r\n\r\n        return {\r\n            'splatCount': splatCount,\r\n            'propertyTypes': propertyTypes,\r\n            'vertexData': vertexData,\r\n            'headerOffset': headerOffset\r\n        };\r\n    }\r\n\r\n    readRawVertexFast(vertexData, offset, fieldOffsets, propertiesToRead, propertyTypes, outVertex) {\r\n        let rawVertex = outVertex || {};\r\n        for (let property of propertiesToRead) {\r\n            const propertyType = propertyTypes[property];\r\n            if (propertyType === 'float') {\r\n                rawVertex[property] = vertexData.getFloat32(offset + fieldOffsets[property], true);\r\n            } else if (propertyType === 'uchar') {\r\n                rawVertex[property] = vertexData.getUint8(offset + fieldOffsets[property]) / 255.0;\r\n            }\r\n        }\r\n    }\r\n\r\n    parseToSplatBuffer(compressionLevel = 0, minimumAlpha = 1) {\r\n\r\n        const startTime = performance.now();\r\n\r\n        console.log('Parsing PLY to SPLAT...');\r\n\r\n        const {splatCount, propertyTypes, vertexData} = this.decodeHeader(this.plyBuffer);\r\n\r\n        // figure out the SH degree from the number of coefficients\r\n        let nRestCoeffs = 0;\r\n        for (const propertyName in propertyTypes) {\r\n            if (propertyName.startsWith('f_rest_')) {\r\n                nRestCoeffs += 1;\r\n            }\r\n        }\r\n        const nCoeffsPerColor = nRestCoeffs / 3;\r\n\r\n        // TODO: Eventually properly support multiple degree spherical harmonics\r\n        // const sphericalHarmonicsDegree = Math.sqrt(nCoeffsPerColor + 1) - 1;\r\n        const sphericalHarmonicsDegree = 0;\r\n\r\n        console.log('Detected degree', sphericalHarmonicsDegree, 'with ', nCoeffsPerColor, 'coefficients per color');\r\n\r\n        // figure out the order in which spherical harmonics should be read\r\n        const shFeatureOrder = [];\r\n        for (let rgb = 0; rgb < 3; ++rgb) {\r\n            shFeatureOrder.push(`f_dc_${rgb}`);\r\n        }\r\n        for (let i = 0; i < nCoeffsPerColor; ++i) {\r\n            for (let rgb = 0; rgb < 3; ++rgb) {\r\n                shFeatureOrder.push(`f_rest_${rgb * nCoeffsPerColor + i}`);\r\n            }\r\n        }\r\n\r\n        let plyRowSize = 0;\r\n        let fieldOffsets = {};\r\n        const fieldSize = {\r\n            'double': 8,\r\n            'int': 4,\r\n            'uint': 4,\r\n            'float': 4,\r\n            'short': 2,\r\n            'ushort': 2,\r\n            'uchar': 1,\r\n        };\r\n        for (let fieldName in propertyTypes) {\r\n            if (propertyTypes.hasOwnProperty(fieldName)) {\r\n                const type = propertyTypes[fieldName];\r\n                fieldOffsets[fieldName] = plyRowSize;\r\n                plyRowSize += fieldSize[type];\r\n            }\r\n        }\r\n\r\n        let rawVertex = {};\r\n\r\n        const propertiesToRead = ['scale_0', 'scale_1', 'scale_2', 'rot_0', 'rot_1', 'rot_2', 'rot_3',\r\n                                  'x', 'y', 'z', 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity'];\r\n\r\n        const validVertexes = [];\r\n        // dummy vertex used for invalid vertexes\r\n        const vertexZero = {};\r\n        for (let propertyToRead of propertiesToRead) vertexZero[propertyToRead] = 0;\r\n        validVertexes.push(vertexZero);\r\n        for (let row = 0; row < splatCount; row++) {\r\n            this.readRawVertexFast(vertexData, row * plyRowSize, fieldOffsets, propertiesToRead, propertyTypes, rawVertex);\r\n            let alpha;\r\n            if (propertyTypes['opacity']) {\r\n                alpha = (1 / (1 + Math.exp(-rawVertex.opacity))) * 255;\r\n            } else {\r\n                alpha = 255;\r\n            }\r\n            if (alpha > minimumAlpha) {\r\n                const newVertex = {};\r\n                for (let propertyToRead of propertiesToRead) newVertex[propertyToRead] = rawVertex[propertyToRead];\r\n                validVertexes.push(newVertex);\r\n            }\r\n        }\r\n\r\n        console.log('Total valid splats: ', validVertexes.length, 'out of', splatCount);\r\n\r\n        const positionsForBucketCalcs = [];\r\n        for (let row = 0; row < validVertexes.length; row++) {\r\n            rawVertex = validVertexes[row];\r\n            positionsForBucketCalcs.push([rawVertex.x, rawVertex.y, rawVertex.z]);\r\n        }\r\n        const buckets = this.computeBuckets(positionsForBucketCalcs);\r\n\r\n        const paddedSplatCount = buckets.length * SplatBufferBucketSize;\r\n        const headerSize = SplatBuffer.HeaderSizeBytes;\r\n        const header = new Uint8Array(new ArrayBuffer(headerSize));\r\n        header[3] = compressionLevel;\r\n        (new Uint32Array(header.buffer, 4, 1))[0] = paddedSplatCount;\r\n\r\n        let bytesPerPosition = SplatBuffer.CompressionLevels[compressionLevel].BytesPerPosition;\r\n        let bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\r\n        let bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\r\n        let bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\r\n        const positionBuffer = new ArrayBuffer(bytesPerPosition * paddedSplatCount);\r\n        const scaleBuffer = new ArrayBuffer(bytesPerScale * paddedSplatCount);\r\n        const colorBuffer = new ArrayBuffer(bytesPerColor * paddedSplatCount);\r\n        const rotationBuffer = new ArrayBuffer(bytesPerRotation * paddedSplatCount);\r\n\r\n        const blockHalfSize = SplatBufferBucketBlockSize / 2.0;\r\n        const compressionScaleRange = SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\r\n        const compressionScaleFactor = compressionScaleRange / blockHalfSize;\r\n        const doubleCompressionScaleRange = compressionScaleRange * 2 + 1;\r\n\r\n        const bucketCenter = new THREE.Vector3();\r\n        const bucketCenterDelta = new THREE.Vector3();\r\n        let outSplatIndex = 0;\r\n        for (let b = 0; b < buckets.length; b++) {\r\n            const bucket = buckets[b];\r\n            bucketCenter.fromArray(bucket.center);\r\n            for (let i = 0; i < bucket.splats.length; i++) {\r\n                let row = bucket.splats[i];\r\n                let invalidSplat = false;\r\n                if (row === 0) {\r\n                    invalidSplat = true;\r\n                }\r\n                rawVertex = validVertexes[row];\r\n\r\n                if (compressionLevel === 0) {\r\n                    const position = new Float32Array(positionBuffer, outSplatIndex * bytesPerPosition, 3);\r\n                    const scales = new Float32Array(scaleBuffer, outSplatIndex * bytesPerScale, 3);\r\n                    const rot = new Float32Array(rotationBuffer, outSplatIndex * bytesPerRotation, 4);\r\n                    if (propertyTypes['scale_0']) {\r\n                        const quat = new THREE.Quaternion(rawVertex.rot_1, rawVertex.rot_2, rawVertex.rot_3, rawVertex.rot_0);\r\n                        quat.normalize();\r\n                        rot.set([quat.w, quat.x, quat.y, quat.z]);\r\n                        scales.set([Math.exp(rawVertex.scale_0), Math.exp(rawVertex.scale_1), Math.exp(rawVertex.scale_2)]);\r\n                    } else {\r\n                        scales.set([0.01, 0.01, 0.01]);\r\n                        rot.set([1.0, 0.0, 0.0, 0.0]);\r\n                    }\r\n                    position.set([rawVertex.x, rawVertex.y, rawVertex.z]);\r\n                } else {\r\n                    const position = new Uint16Array(positionBuffer, outSplatIndex * bytesPerPosition, 3);\r\n                    const scales = new Uint16Array(scaleBuffer, outSplatIndex * bytesPerScale, 3);\r\n                    const rot = new Uint16Array(rotationBuffer, outSplatIndex * bytesPerRotation, 4);\r\n                    const thf = THREE.DataUtils.toHalfFloat.bind(THREE.DataUtils);\r\n                    if (propertyTypes['scale_0']) {\r\n                        const quat = new THREE.Quaternion(rawVertex.rot_1, rawVertex.rot_2, rawVertex.rot_3, rawVertex.rot_0);\r\n                        quat.normalize();\r\n                        rot.set([thf(quat.w), thf(quat.x), thf(quat.y), thf(quat.z)]);\r\n                        scales.set([thf(Math.exp(rawVertex.scale_0)), thf(Math.exp(rawVertex.scale_1)), thf(Math.exp(rawVertex.scale_2))]);\r\n                    } else {\r\n                        scales.set([thf(0.01), thf(0.01), thf(0.01)]);\r\n                        rot.set([thf(1.), 0, 0, 0]);\r\n                    }\r\n                    bucketCenterDelta.set(rawVertex.x, rawVertex.y, rawVertex.z).sub(bucketCenter);\r\n                    bucketCenterDelta.x = Math.round(bucketCenterDelta.x * compressionScaleFactor) + compressionScaleRange;\r\n                    bucketCenterDelta.x = clamp(bucketCenterDelta.x, 0, doubleCompressionScaleRange);\r\n                    bucketCenterDelta.y = Math.round(bucketCenterDelta.y * compressionScaleFactor) + compressionScaleRange;\r\n                    bucketCenterDelta.y = clamp(bucketCenterDelta.y, 0, doubleCompressionScaleRange);\r\n                    bucketCenterDelta.z = Math.round(bucketCenterDelta.z * compressionScaleFactor) + compressionScaleRange;\r\n                    bucketCenterDelta.z = clamp(bucketCenterDelta.z, 0, doubleCompressionScaleRange);\r\n                    position.set([bucketCenterDelta.x, bucketCenterDelta.y, bucketCenterDelta.z]);\r\n                }\r\n\r\n                const rgba = new Uint8ClampedArray(colorBuffer, outSplatIndex * bytesPerColor, 4);\r\n                if (invalidSplat) {\r\n                    rgba[0] = 255;\r\n                    rgba[1] = 0;\r\n                    rgba[2] = 0;\r\n                    rgba[3] = 0;\r\n                } else {\r\n                    if (propertyTypes['f_dc_0']) {\r\n                        const SH_C0 = 0.28209479177387814;\r\n                        rgba.set([(0.5 + SH_C0 * rawVertex.f_dc_0) * 255,\r\n                                  (0.5 + SH_C0 * rawVertex.f_dc_1) * 255,\r\n                                  (0.5 + SH_C0 * rawVertex.f_dc_2) * 255]);\r\n                    } else {\r\n                        rgba.set([255, 0, 0]);\r\n                    }\r\n                    if (propertyTypes['opacity']) {\r\n                        rgba[3] = (1 / (1 + Math.exp(-rawVertex.opacity))) * 255;\r\n                    } else {\r\n                        rgba[3] = 255;\r\n                    }\r\n                }\r\n\r\n                outSplatIndex++;\r\n            }\r\n        }\r\n\r\n        const bytesPerBucket = 12;\r\n        const bucketsSize = bytesPerBucket * buckets.length;\r\n        const splatDataBufferSize = positionBuffer.byteLength + scaleBuffer.byteLength +\r\n                                    colorBuffer.byteLength + rotationBuffer.byteLength;\r\n\r\n        const headerArrayUint32 = new Uint32Array(header.buffer);\r\n        const headerArrayFloat32 = new Float32Array(header.buffer);\r\n        let unifiedBufferSize = headerSize + splatDataBufferSize;\r\n        if (compressionLevel > 0) {\r\n            unifiedBufferSize += bucketsSize;\r\n            headerArrayUint32[2] = SplatBufferBucketSize;\r\n            headerArrayUint32[3] = buckets.length;\r\n            headerArrayFloat32[4] = SplatBufferBucketBlockSize;\r\n            headerArrayUint32[5] = bytesPerBucket;\r\n            headerArrayUint32[6] = SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\r\n        }\r\n\r\n        const unifiedBuffer = new ArrayBuffer(unifiedBufferSize);\r\n        new Uint8Array(unifiedBuffer, 0, headerSize).set(header);\r\n        new Uint8Array(unifiedBuffer, headerSize, positionBuffer.byteLength).set(new Uint8Array(positionBuffer));\r\n        new Uint8Array(unifiedBuffer, headerSize + positionBuffer.byteLength, scaleBuffer.byteLength).set(new Uint8Array(scaleBuffer));\r\n        new Uint8Array(unifiedBuffer, headerSize + positionBuffer.byteLength + scaleBuffer.byteLength,\r\n                       colorBuffer.byteLength).set(new Uint8Array(colorBuffer));\r\n        new Uint8Array(unifiedBuffer, headerSize + positionBuffer.byteLength + scaleBuffer.byteLength + colorBuffer.byteLength,\r\n                       rotationBuffer.byteLength).set(new Uint8Array(rotationBuffer));\r\n\r\n        if (compressionLevel > 0) {\r\n            const bucketArray = new Float32Array(unifiedBuffer, headerSize + splatDataBufferSize, buckets.length * 3);\r\n            for (let i = 0; i < buckets.length; i++) {\r\n                const bucket = buckets[i];\r\n                const base = i * 3;\r\n                bucketArray[base] = bucket.center[0];\r\n                bucketArray[base + 1] = bucket.center[1];\r\n                bucketArray[base + 2] = bucket.center[2];\r\n            }\r\n        }\r\n\r\n        const splatBuffer = new SplatBuffer(unifiedBuffer);\r\n\r\n        const endTime = performance.now();\r\n\r\n        console.log('Parsing PLY to SPLAT complete!');\r\n        console.log('Total time: ', (endTime - startTime).toFixed(2) + ' ms');\r\n\r\n        return splatBuffer;\r\n    }\r\n\r\n    computeBuckets(positions) {\r\n        const blockSize = SplatBufferBucketBlockSize;\r\n        const halfBlockSize = blockSize / 2.0;\r\n        const splatCount = positions.length;\r\n\r\n        const min = new THREE.Vector3();\r\n        const max = new THREE.Vector3();\r\n\r\n        // ignore the first splat since it's the invalid designator\r\n        for (let i = 1; i < splatCount; i++) {\r\n            const position = positions[i];\r\n            if (i === 0 || position[0] < min.x) min.x = position[0];\r\n            if (i === 0 || position[0] > max.x) max.x = position[0];\r\n            if (i === 0 || position[1] < min.y) min.y = position[1];\r\n            if (i === 0 || position[1] > max.y) max.y = position[1];\r\n            if (i === 0 || position[2] < min.z) min.z = position[2];\r\n            if (i === 0 || position[2] > max.z) max.z = position[2];\r\n        }\r\n\r\n        const dimensions = new THREE.Vector3().copy(max).sub(min);\r\n        const yBlocks = Math.ceil(dimensions.y / blockSize);\r\n        const zBlocks = Math.ceil(dimensions.z / blockSize);\r\n\r\n        const blockCenter = new THREE.Vector3();\r\n        const fullBuckets = [];\r\n        const partiallyFullBuckets = {};\r\n\r\n        // ignore the first splat since it's the invalid designator\r\n        for (let i = 1; i < splatCount; i++) {\r\n            const position = positions[i];\r\n            const xBlock = Math.ceil((position[0] - min.x) / blockSize);\r\n            const yBlock = Math.ceil((position[1] - min.y) / blockSize);\r\n            const zBlock = Math.ceil((position[2] - min.z) / blockSize);\r\n\r\n            blockCenter.x = (xBlock - 1) * blockSize + min.x + halfBlockSize;\r\n            blockCenter.y = (yBlock - 1) * blockSize + min.y + halfBlockSize;\r\n            blockCenter.z = (zBlock - 1) * blockSize + min.z + halfBlockSize;\r\n\r\n            const bucketId = xBlock * (yBlocks * zBlocks) + yBlock * zBlocks + zBlock;\r\n            let bucket = partiallyFullBuckets[bucketId];\r\n            if (!bucket) {\r\n                partiallyFullBuckets[bucketId] = bucket = {\r\n                    'splats': [],\r\n                    'center': blockCenter.toArray()\r\n                };\r\n            }\r\n\r\n            bucket.splats.push(i);\r\n            if (bucket.splats.length >= SplatBufferBucketSize) {\r\n                fullBuckets.push(bucket);\r\n                partiallyFullBuckets[bucketId] = null;\r\n            }\r\n        }\r\n\r\n        // fill partially full buckets with invalid splats (splat 0)\r\n        // to get them up to SplatBufferBucketSize\r\n        for (let bucketId in partiallyFullBuckets) {\r\n            if (partiallyFullBuckets.hasOwnProperty(bucketId)) {\r\n                const bucket = partiallyFullBuckets[bucketId];\r\n                if (bucket) {\r\n                    while (bucket.splats.length < SplatBufferBucketSize) {\r\n                        bucket.splats.push(0);\r\n                    }\r\n                    fullBuckets.push(bucket);\r\n                }\r\n            }\r\n        }\r\n\r\n        return fullBuckets;\r\n    }\r\n}\r\n","import { PlyParser } from './PlyParser.js';\r\nimport { fetchWithProgress } from './Util.js';\r\n\r\nexport class PlyLoader {\r\n\r\n    constructor() {\r\n        this.splatBuffer = null;\r\n    }\r\n\r\n    fetchFile(fileName, onProgress) {\r\n        return new Promise((resolve, reject) => {\r\n            fetchWithProgress(fileName, onProgress)\r\n            .then((data) => {\r\n                resolve(data);\r\n            })\r\n            .catch((err) => {\r\n                reject(err);\r\n            });\r\n        });\r\n    }\r\n\r\n    loadFromURL(fileName, compressionLevel = 0, minimumAlpha = 1) {\r\n        return new Promise((resolve, reject) => {\r\n            const loadPromise = this.fetchFile(fileName);\r\n            loadPromise\r\n            .then((plyFileData) => {\r\n                const plyParser = new PlyParser(plyFileData);\r\n                const splatBuffer = plyParser.parseToSplatBuffer(compressionLevel, minimumAlpha);\r\n                this.splatBuffer = splatBuffer;\r\n                resolve(splatBuffer);\r\n            })\r\n            .catch((err) => {\r\n                reject(err);\r\n            });\r\n        });\r\n    }\r\n\r\n}\r\n","import { SplatBuffer } from './SplatBuffer.js';\r\nimport { fetchWithProgress } from './Util.js';\r\n\r\nexport class SplatLoader {\r\n\r\n    constructor(splatBuffer = null) {\r\n        this.splatBuffer = splatBuffer;\r\n        this.downLoadLink = null;\r\n    }\r\n\r\n    loadFromURL(fileName, onProgress) {\r\n        return new Promise((resolve, reject) => {\r\n            fetchWithProgress(fileName, onProgress)\r\n            .then((bufferData) => {\r\n                const splatBuffer = new SplatBuffer(bufferData);\r\n                resolve(splatBuffer);\r\n            })\r\n            .catch((err) => {\r\n                reject(err);\r\n            });\r\n        });\r\n    }\r\n\r\n    setFromBuffer(splatBuffer) {\r\n        this.splatBuffer = splatBuffer;\r\n    }\r\n\r\n    downloadFile(fileName) {\r\n        const headerData = new Uint8Array(this.splatBuffer.getHeaderBufferData());\r\n        const splatData = new Uint8Array(this.splatBuffer.getSplatBufferData());\r\n        const blob = new Blob([headerData.buffer, splatData.buffer], {\r\n            type: 'application/octet-stream',\r\n        });\r\n\r\n        if (!this.downLoadLink) {\r\n            this.downLoadLink = document.createElement('a');\r\n            document.body.appendChild(this.downLoadLink);\r\n        }\r\n        this.downLoadLink.download = fileName;\r\n        this.downLoadLink.href = URL.createObjectURL(blob);\r\n        this.downLoadLink.click();\r\n    }\r\n\r\n}\r\n","import {\n    EventDispatcher,\n    MOUSE,\n    Quaternion,\n    Spherical,\n    TOUCH,\n    Vector2,\n    Vector3,\n    Plane,\n    Ray,\n    MathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nclass OrbitControls extends EventDispatcher {\n\n    constructor( object, domElement ) {\n\n        super();\n\n        this.object = object;\n        this.domElement = domElement;\n        this.domElement.style.touchAction = 'none'; // disable touch scroll\n\n        // Set to false to disable this control\n        this.enabled = true;\n\n        // \"target\" sets the location of focus, where the object orbits around\n        this.target = new Vector3();\n\n        // How far you can dolly in and out ( PerspectiveCamera only )\n        this.minDistance = 0;\n        this.maxDistance = Infinity;\n\n        // How far you can zoom in and out ( OrthographicCamera only )\n        this.minZoom = 0;\n        this.maxZoom = Infinity;\n\n        // How far you can orbit vertically, upper and lower limits.\n        // Range is 0 to Math.PI radians.\n        this.minPolarAngle = 0; // radians\n        this.maxPolarAngle = Math.PI; // radians\n\n        // How far you can orbit horizontally, upper and lower limits.\n        // If set, the interval [min, max] must be a sub-interval of [- 2 PI, 2 PI], with ( max - min < 2 PI )\n        this.minAzimuthAngle = - Infinity; // radians\n        this.maxAzimuthAngle = Infinity; // radians\n\n        // Set to true to enable damping (inertia)\n        // If damping is enabled, you must call controls.update() in your animation loop\n        this.enableDamping = false;\n        this.dampingFactor = 0.05;\n\n        // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n        // Set to false to disable zooming\n        this.enableZoom = true;\n        this.zoomSpeed = 1.0;\n\n        // Set to false to disable rotating\n        this.enableRotate = true;\n        this.rotateSpeed = 1.0;\n\n        // Set to false to disable panning\n        this.enablePan = true;\n        this.panSpeed = 1.0;\n        this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n        this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n        this.zoomToCursor = false;\n\n        // Set to true to automatically rotate around the target\n        // If auto-rotate is enabled, you must call controls.update() in your animation loop\n        this.autoRotate = false;\n        this.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n        // The four arrow keys\n        this.keys = { LEFT: 'KeyA', UP: 'KeyW', RIGHT: 'KeyD', BOTTOM: 'KeyS' };\n\n        // Mouse buttons\n        this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n        // Touch fingers\n        this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n        // for reset\n        this.target0 = this.target.clone();\n        this.position0 = this.object.position.clone();\n        this.zoom0 = this.object.zoom;\n\n        // the target DOM element for key events\n        this._domElementKeyEvents = null;\n\n        //\n        // public methods\n        //\n\n        this.getPolarAngle = function() {\n\n            return spherical.phi;\n\n        };\n\n        this.getAzimuthalAngle = function() {\n\n            return spherical.theta;\n\n        };\n\n        this.getDistance = function() {\n\n            return this.object.position.distanceTo( this.target );\n\n        };\n\n        this.listenToKeyEvents = function( domElement ) {\n\n            domElement.addEventListener( 'keydown', onKeyDown );\n            this._domElementKeyEvents = domElement;\n\n        };\n\n        this.stopListenToKeyEvents = function() {\n\n            this._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n            this._domElementKeyEvents = null;\n\n        };\n\n        this.saveState = function() {\n\n            scope.target0.copy( scope.target );\n            scope.position0.copy( scope.object.position );\n            scope.zoom0 = scope.object.zoom;\n\n        };\n\n        this.reset = function() {\n\n            scope.target.copy( scope.target0 );\n            scope.object.position.copy( scope.position0 );\n            scope.object.zoom = scope.zoom0;\n\n            scope.object.updateProjectionMatrix();\n            scope.dispatchEvent( _changeEvent );\n\n            scope.update();\n\n            state = STATE.NONE;\n\n        };\n\n        // this method is exposed, but perhaps it would be better if we can make it private...\n        this.update = function() {\n\n            const offset = new Vector3();\n\n            // so camera.up is the orbit axis\n            const quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n            const quatInverse = quat.clone().invert();\n\n            const lastPosition = new Vector3();\n            const lastQuaternion = new Quaternion();\n            const lastTargetPosition = new Vector3();\n\n            const twoPI = 2 * Math.PI;\n\n            return function update() {\n\n                quat.setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n                quatInverse.copy(quat).invert();\n\n                const position = scope.object.position;\n\n                offset.copy( position ).sub( scope.target );\n\n                // rotate offset to \"y-axis-is-up\" space\n                offset.applyQuaternion( quat );\n\n                // angle from z-axis around y-axis\n                spherical.setFromVector3( offset );\n\n                if ( scope.autoRotate && state === STATE.NONE ) {\n\n                    rotateLeft( getAutoRotationAngle() );\n\n                }\n\n                if ( scope.enableDamping ) {\n\n                    spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n                    spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n                } else {\n\n                    spherical.theta += sphericalDelta.theta;\n                    spherical.phi += sphericalDelta.phi;\n\n                }\n\n                // restrict theta to be between desired limits\n\n                let min = scope.minAzimuthAngle;\n                let max = scope.maxAzimuthAngle;\n\n                if ( isFinite( min ) && isFinite( max ) ) {\n\n                    if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n                    if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n                    if ( min <= max ) {\n\n                        spherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n                    } else {\n\n                        spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n                            Math.max( min, spherical.theta ) :\n                            Math.min( max, spherical.theta );\n\n                    }\n\n                }\n\n                // restrict phi to be between desired limits\n                spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n                spherical.makeSafe();\n\n\n                // move target to panned location\n\n                if ( scope.enableDamping === true ) {\n\n                    scope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n                } else {\n\n                    scope.target.add( panOffset );\n\n                }\n\n                // adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n                // we adjust zoom later in these cases\n                if ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {\n\n                    spherical.radius = clampDistance( spherical.radius );\n\n                } else {\n\n                    spherical.radius = clampDistance( spherical.radius * scale );\n\n                }\n\n\n                offset.setFromSpherical( spherical );\n\n                // rotate offset back to \"camera-up-vector-is-up\" space\n                offset.applyQuaternion( quatInverse );\n\n                position.copy( scope.target ).add( offset );\n\n                scope.object.lookAt( scope.target );\n\n                if ( scope.enableDamping === true ) {\n\n                    sphericalDelta.theta *= ( 1 - scope.dampingFactor );\n                    sphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n                    panOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n                } else {\n\n                    sphericalDelta.set( 0, 0, 0 );\n\n                    panOffset.set( 0, 0, 0 );\n\n                }\n\n                // adjust camera position\n                let zoomChanged = false;\n                if ( scope.zoomToCursor && performCursorZoom ) {\n\n                    let newRadius = null;\n                    if ( scope.object.isPerspectiveCamera ) {\n\n                        // move the camera down the pointer ray\n                        // this method avoids floating point error\n                        const prevRadius = offset.length();\n                        newRadius = clampDistance( prevRadius * scale );\n\n                        const radiusDelta = prevRadius - newRadius;\n                        scope.object.position.addScaledVector( dollyDirection, radiusDelta );\n                        scope.object.updateMatrixWorld();\n\n                    } else if ( scope.object.isOrthographicCamera ) {\n\n                        // adjust the ortho camera position based on zoom changes\n                        const mouseBefore = new Vector3( mouse.x, mouse.y, 0 );\n                        mouseBefore.unproject( scope.object );\n\n                        scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n                        scope.object.updateProjectionMatrix();\n                        zoomChanged = true;\n\n                        const mouseAfter = new Vector3( mouse.x, mouse.y, 0 );\n                        mouseAfter.unproject( scope.object );\n\n                        scope.object.position.sub( mouseAfter ).add( mouseBefore );\n                        scope.object.updateMatrixWorld();\n\n                        newRadius = offset.length();\n\n                    } else {\n\n                        console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n                        scope.zoomToCursor = false;\n\n                    }\n\n                    // handle the placement of the target\n                    if ( newRadius !== null ) {\n\n                        if ( this.screenSpacePanning ) {\n\n                            // position the orbit target in front of the new camera position\n                            scope.target.set( 0, 0, - 1 )\n                                .transformDirection( scope.object.matrix )\n                                .multiplyScalar( newRadius )\n                                .add( scope.object.position );\n\n                        } else {\n\n                            // get the ray and translation plane to compute target\n                            _ray.origin.copy( scope.object.position );\n                            _ray.direction.set( 0, 0, - 1 ).transformDirection( scope.object.matrix );\n\n                            // if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n                            // extremely large values\n                            if ( Math.abs( scope.object.up.dot( _ray.direction ) ) < TILT_LIMIT ) {\n\n                                object.lookAt( scope.target );\n\n                            } else {\n\n                                _plane.setFromNormalAndCoplanarPoint( scope.object.up, scope.target );\n                                _ray.intersectPlane( _plane, scope.target );\n\n                            }\n\n                        }\n\n                    }\n\n                } else if ( scope.object.isOrthographicCamera ) {\n\n                    scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n                    scope.object.updateProjectionMatrix();\n                    zoomChanged = true;\n\n                }\n\n                scale = 1;\n                performCursorZoom = false;\n\n                // update condition is:\n                // min(camera displacement, camera rotation in radians)^2 > EPS\n                // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n                if ( zoomChanged ||\n                    lastPosition.distanceToSquared( scope.object.position ) > EPS ||\n                    8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||\n                    lastTargetPosition.distanceToSquared( scope.target ) > 0 ) {\n\n                    scope.dispatchEvent( _changeEvent );\n\n                    lastPosition.copy( scope.object.position );\n                    lastQuaternion.copy( scope.object.quaternion );\n                    lastTargetPosition.copy( scope.target );\n\n                    zoomChanged = false;\n\n                    return true;\n\n                }\n\n                return false;\n\n            };\n\n        }();\n\n        this.dispose = function() {\n\n            scope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n            scope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n            scope.domElement.removeEventListener( 'pointercancel', onPointerUp );\n            scope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n            scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n            scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\n            if ( scope._domElementKeyEvents !== null ) {\n\n                scope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n                scope._domElementKeyEvents = null;\n\n            }\n\n        };\n\n        //\n        // internals\n        //\n\n        const scope = this;\n\n        const STATE = {\n            NONE: - 1,\n            ROTATE: 0,\n            DOLLY: 1,\n            PAN: 2,\n            TOUCH_ROTATE: 3,\n            TOUCH_PAN: 4,\n            TOUCH_DOLLY_PAN: 5,\n            TOUCH_DOLLY_ROTATE: 6\n        };\n\n        let state = STATE.NONE;\n\n        const EPS = 0.000001;\n\n        // current position in spherical coordinates\n        const spherical = new Spherical();\n        const sphericalDelta = new Spherical();\n\n        let scale = 1;\n        const panOffset = new Vector3();\n\n        const rotateStart = new Vector2();\n        const rotateEnd = new Vector2();\n        const rotateDelta = new Vector2();\n\n        const panStart = new Vector2();\n        const panEnd = new Vector2();\n        const panDelta = new Vector2();\n\n        const dollyStart = new Vector2();\n        const dollyEnd = new Vector2();\n        const dollyDelta = new Vector2();\n\n        const dollyDirection = new Vector3();\n        const mouse = new Vector2();\n        let performCursorZoom = false;\n\n        const pointers = [];\n        const pointerPositions = {};\n\n        function getAutoRotationAngle() {\n\n            return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n        }\n\n        function getZoomScale() {\n\n            return Math.pow( 0.95, scope.zoomSpeed );\n\n        }\n\n        function rotateLeft( angle ) {\n\n            sphericalDelta.theta -= angle;\n\n        }\n\n        function rotateUp( angle ) {\n\n            sphericalDelta.phi -= angle;\n\n        }\n\n        const panLeft = function() {\n\n            const v = new Vector3();\n\n            return function panLeft( distance, objectMatrix ) {\n\n                v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n                v.multiplyScalar( - distance );\n\n                panOffset.add( v );\n\n            };\n\n        }();\n\n        const panUp = function() {\n\n            const v = new Vector3();\n\n            return function panUp( distance, objectMatrix ) {\n\n                if ( scope.screenSpacePanning === true ) {\n\n                    v.setFromMatrixColumn( objectMatrix, 1 );\n\n                } else {\n\n                    v.setFromMatrixColumn( objectMatrix, 0 );\n                    v.crossVectors( scope.object.up, v );\n\n                }\n\n                v.multiplyScalar( distance );\n\n                panOffset.add( v );\n\n            };\n\n        }();\n\n        // deltaX and deltaY are in pixels; right and down are positive\n        const pan = function() {\n\n            const offset = new Vector3();\n\n            return function pan( deltaX, deltaY ) {\n\n                const element = scope.domElement;\n\n                if ( scope.object.isPerspectiveCamera ) {\n\n                    // perspective\n                    const position = scope.object.position;\n                    offset.copy( position ).sub( scope.target );\n                    let targetDistance = offset.length();\n\n                    // half of the fov is center to top of screen\n                    targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n                    // we use only clientHeight here so aspect ratio does not distort speed\n                    panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n                    panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n                } else if ( scope.object.isOrthographicCamera ) {\n\n                    // orthographic\n                    panLeft( deltaX * ( scope.object.right - scope.object.left ) /\n                                        scope.object.zoom / element.clientWidth, scope.object.matrix );\n                    panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom /\n                                      element.clientHeight, scope.object.matrix );\n\n                } else {\n\n                    // camera neither orthographic nor perspective\n                    console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n                    scope.enablePan = false;\n\n                }\n\n            };\n\n        }();\n\n        function dollyOut( dollyScale ) {\n\n            if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n                scale /= dollyScale;\n\n            } else {\n\n                console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n                scope.enableZoom = false;\n\n            }\n\n        }\n\n        function dollyIn( dollyScale ) {\n\n            if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n                scale *= dollyScale;\n\n            } else {\n\n                console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n                scope.enableZoom = false;\n\n            }\n\n        }\n\n        function updateMouseParameters( event ) {\n\n            if ( ! scope.zoomToCursor ) {\n\n                return;\n\n            }\n\n            performCursorZoom = true;\n\n            const rect = scope.domElement.getBoundingClientRect();\n            const x = event.clientX - rect.left;\n            const y = event.clientY - rect.top;\n            const w = rect.width;\n            const h = rect.height;\n\n            mouse.x = ( x / w ) * 2 - 1;\n            mouse.y = - ( y / h ) * 2 + 1;\n\n            dollyDirection.set( mouse.x, mouse.y, 1 ).unproject( object ).sub( object.position ).normalize();\n\n        }\n\n        function clampDistance( dist ) {\n\n            return Math.max( scope.minDistance, Math.min( scope.maxDistance, dist ) );\n\n        }\n\n        //\n        // event callbacks - update the object state\n        //\n\n        function handleMouseDownRotate( event ) {\n\n            rotateStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseDownDolly( event ) {\n\n            updateMouseParameters( event );\n            dollyStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseDownPan( event ) {\n\n            panStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseMoveRotate( event ) {\n\n            rotateEnd.set( event.clientX, event.clientY );\n\n            rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n            const element = scope.domElement;\n\n            rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n            rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n            rotateStart.copy( rotateEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseMoveDolly( event ) {\n\n            dollyEnd.set( event.clientX, event.clientY );\n\n            dollyDelta.subVectors( dollyEnd, dollyStart );\n\n            if ( dollyDelta.y > 0 ) {\n\n                dollyOut( getZoomScale() );\n\n            } else if ( dollyDelta.y < 0 ) {\n\n                dollyIn( getZoomScale() );\n\n            }\n\n            dollyStart.copy( dollyEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseMovePan( event ) {\n\n            panEnd.set( event.clientX, event.clientY );\n\n            panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n            pan( panDelta.x, panDelta.y );\n\n            panStart.copy( panEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseWheel( event ) {\n\n            updateMouseParameters( event );\n\n            if ( event.deltaY < 0 ) {\n\n                dollyIn( getZoomScale() );\n\n            } else if ( event.deltaY > 0 ) {\n\n                dollyOut( getZoomScale() );\n\n            }\n\n            scope.update();\n\n        }\n\n        function handleKeyDown( event ) {\n\n            let needsUpdate = false;\n\n            switch ( event.code ) {\n\n                case scope.keys.UP:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( 0, scope.keyPanSpeed );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.BOTTOM:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( 0, - scope.keyPanSpeed );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.LEFT:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( scope.keyPanSpeed, 0 );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.RIGHT:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( - scope.keyPanSpeed, 0 );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n            }\n\n            if ( needsUpdate ) {\n\n                // prevent the browser from scrolling on cursor keys\n                event.preventDefault();\n\n                scope.update();\n\n            }\n\n\n        }\n\n        function handleTouchStartRotate() {\n\n            if ( pointers.length === 1 ) {\n\n                rotateStart.set( pointers[0].pageX, pointers[0].pageY );\n\n            } else {\n\n                const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n                const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n                rotateStart.set( x, y );\n\n            }\n\n        }\n\n        function handleTouchStartPan() {\n\n            if ( pointers.length === 1 ) {\n\n                panStart.set( pointers[0].pageX, pointers[0].pageY );\n\n            } else {\n\n                const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n                const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n                panStart.set( x, y );\n\n            }\n\n        }\n\n        function handleTouchStartDolly() {\n\n            const dx = pointers[0].pageX - pointers[1].pageX;\n            const dy = pointers[0].pageY - pointers[1].pageY;\n\n            const distance = Math.sqrt( dx * dx + dy * dy );\n\n            dollyStart.set( 0, distance );\n\n        }\n\n        function handleTouchStartDollyPan() {\n\n            if ( scope.enableZoom ) handleTouchStartDolly();\n\n            if ( scope.enablePan ) handleTouchStartPan();\n\n        }\n\n        function handleTouchStartDollyRotate() {\n\n            if ( scope.enableZoom ) handleTouchStartDolly();\n\n            if ( scope.enableRotate ) handleTouchStartRotate();\n\n        }\n\n        function handleTouchMoveRotate( event ) {\n\n            if ( pointers.length == 1 ) {\n\n                rotateEnd.set( event.pageX, event.pageY );\n\n            } else {\n\n                const position = getSecondPointerPosition( event );\n\n                const x = 0.5 * ( event.pageX + position.x );\n                const y = 0.5 * ( event.pageY + position.y );\n\n                rotateEnd.set( x, y );\n\n            }\n\n            rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n            const element = scope.domElement;\n\n            rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n            rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n            rotateStart.copy( rotateEnd );\n\n        }\n\n        function handleTouchMovePan( event ) {\n\n            if ( pointers.length === 1 ) {\n\n                panEnd.set( event.pageX, event.pageY );\n\n            } else {\n\n                const position = getSecondPointerPosition( event );\n\n                const x = 0.5 * ( event.pageX + position.x );\n                const y = 0.5 * ( event.pageY + position.y );\n\n                panEnd.set( x, y );\n\n            }\n\n            panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n            pan( panDelta.x, panDelta.y );\n\n            panStart.copy( panEnd );\n\n        }\n\n        function handleTouchMoveDolly( event ) {\n\n            const position = getSecondPointerPosition( event );\n\n            const dx = event.pageX - position.x;\n            const dy = event.pageY - position.y;\n\n            const distance = Math.sqrt( dx * dx + dy * dy );\n\n            dollyEnd.set( 0, distance );\n\n            dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n            dollyOut( dollyDelta.y );\n\n            dollyStart.copy( dollyEnd );\n\n        }\n\n        function handleTouchMoveDollyPan( event ) {\n\n            if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n            if ( scope.enablePan ) handleTouchMovePan( event );\n\n        }\n\n        function handleTouchMoveDollyRotate( event ) {\n\n            if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n            if ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n        }\n\n        //\n        // event handlers - FSM: listen for events and reset state\n        //\n\n        function onPointerDown( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            if ( pointers.length === 0 ) {\n\n                scope.domElement.setPointerCapture( event.pointerId );\n\n                scope.domElement.addEventListener( 'pointermove', onPointerMove );\n                scope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n            }\n\n            //\n\n            addPointer( event );\n\n            if ( event.pointerType === 'touch' ) {\n\n                onTouchStart( event );\n\n            } else {\n\n                onMouseDown( event );\n\n            }\n\n        }\n\n        function onPointerMove( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            if ( event.pointerType === 'touch' ) {\n\n                onTouchMove( event );\n\n            } else {\n\n                onMouseMove( event );\n\n            }\n\n        }\n\n        function onPointerUp( event ) {\n\n            removePointer( event );\n\n            if ( pointers.length === 0 ) {\n\n                scope.domElement.releasePointerCapture( event.pointerId );\n\n                scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n                scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n            }\n\n            scope.dispatchEvent( _endEvent );\n\n            state = STATE.NONE;\n\n        }\n\n        function onMouseDown( event ) {\n\n            let mouseAction;\n\n            switch ( event.button ) {\n\n                case 0:\n\n                    mouseAction = scope.mouseButtons.LEFT;\n                    break;\n\n                case 1:\n\n                    mouseAction = scope.mouseButtons.MIDDLE;\n                    break;\n\n                case 2:\n\n                    mouseAction = scope.mouseButtons.RIGHT;\n                    break;\n\n                default:\n\n                    mouseAction = - 1;\n\n            }\n\n            switch ( mouseAction ) {\n\n                case MOUSE.DOLLY:\n\n                    if ( scope.enableZoom === false ) return;\n\n                    handleMouseDownDolly( event );\n\n                    state = STATE.DOLLY;\n\n                    break;\n\n                case MOUSE.ROTATE:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        if ( scope.enablePan === false ) return;\n\n                        handleMouseDownPan( event );\n\n                        state = STATE.PAN;\n\n                    } else {\n\n                        if ( scope.enableRotate === false ) return;\n\n                        handleMouseDownRotate( event );\n\n                        state = STATE.ROTATE;\n\n                    }\n\n                    break;\n\n                case MOUSE.PAN:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        if ( scope.enableRotate === false ) return;\n\n                        handleMouseDownRotate( event );\n\n                        state = STATE.ROTATE;\n\n                    } else {\n\n                        if ( scope.enablePan === false ) return;\n\n                        handleMouseDownPan( event );\n\n                        state = STATE.PAN;\n\n                    }\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n            if ( state !== STATE.NONE ) {\n\n                scope.dispatchEvent( _startEvent );\n\n            }\n\n        }\n\n        function onMouseMove( event ) {\n\n            switch ( state ) {\n\n                case STATE.ROTATE:\n\n                    if ( scope.enableRotate === false ) return;\n\n                    handleMouseMoveRotate( event );\n\n                    break;\n\n                case STATE.DOLLY:\n\n                    if ( scope.enableZoom === false ) return;\n\n                    handleMouseMoveDolly( event );\n\n                    break;\n\n                case STATE.PAN:\n\n                    if ( scope.enablePan === false ) return;\n\n                    handleMouseMovePan( event );\n\n                    break;\n\n            }\n\n        }\n\n        function onMouseWheel( event ) {\n\n            if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n            event.preventDefault();\n\n            scope.dispatchEvent( _startEvent );\n\n            handleMouseWheel( event );\n\n            scope.dispatchEvent( _endEvent );\n\n        }\n\n        function onKeyDown( event ) {\n\n            if ( scope.enabled === false || scope.enablePan === false ) return;\n\n            handleKeyDown( event );\n\n        }\n\n        function onTouchStart( event ) {\n\n            trackPointer( event );\n\n            switch ( pointers.length ) {\n\n                case 1:\n\n                    switch ( scope.touches.ONE ) {\n\n                        case TOUCH.ROTATE:\n\n                            if ( scope.enableRotate === false ) return;\n\n                            handleTouchStartRotate();\n\n                            state = STATE.TOUCH_ROTATE;\n\n                            break;\n\n                        case TOUCH.PAN:\n\n                            if ( scope.enablePan === false ) return;\n\n                            handleTouchStartPan();\n\n                            state = STATE.TOUCH_PAN;\n\n                            break;\n\n                        default:\n\n                            state = STATE.NONE;\n\n                    }\n\n                    break;\n\n                case 2:\n\n                    switch ( scope.touches.TWO ) {\n\n                        case TOUCH.DOLLY_PAN:\n\n                            if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n                            handleTouchStartDollyPan();\n\n                            state = STATE.TOUCH_DOLLY_PAN;\n\n                            break;\n\n                        case TOUCH.DOLLY_ROTATE:\n\n                            if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n                            handleTouchStartDollyRotate();\n\n                            state = STATE.TOUCH_DOLLY_ROTATE;\n\n                            break;\n\n                        default:\n\n                            state = STATE.NONE;\n\n                    }\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n            if ( state !== STATE.NONE ) {\n\n                scope.dispatchEvent( _startEvent );\n\n            }\n\n        }\n\n        function onTouchMove( event ) {\n\n            trackPointer( event );\n\n            switch ( state ) {\n\n                case STATE.TOUCH_ROTATE:\n\n                    if ( scope.enableRotate === false ) return;\n\n                    handleTouchMoveRotate( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_PAN:\n\n                    if ( scope.enablePan === false ) return;\n\n                    handleTouchMovePan( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_DOLLY_PAN:\n\n                    if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n                    handleTouchMoveDollyPan( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_DOLLY_ROTATE:\n\n                    if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n                    handleTouchMoveDollyRotate( event );\n\n                    scope.update();\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n        }\n\n        function onContextMenu( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            event.preventDefault();\n\n        }\n\n        function addPointer( event ) {\n\n            pointers.push( event );\n\n        }\n\n        function removePointer( event ) {\n\n            delete pointerPositions[event.pointerId];\n\n            for ( let i = 0; i < pointers.length; i ++ ) {\n\n                if ( pointers[i].pointerId == event.pointerId ) {\n\n                    pointers.splice( i, 1 );\n                    return;\n\n                }\n\n            }\n\n        }\n\n        function trackPointer( event ) {\n\n            let position = pointerPositions[event.pointerId];\n\n            if ( position === undefined ) {\n\n                position = new Vector2();\n                pointerPositions[event.pointerId] = position;\n\n            }\n\n            position.set( event.pageX, event.pageY );\n\n        }\n\n        function getSecondPointerPosition( event ) {\n\n            const pointer = ( event.pointerId === pointers[0].pointerId ) ? pointers[1] : pointers[0];\n\n            return pointerPositions[pointer.pointerId];\n\n        }\n\n        //\n\n        scope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n        scope.domElement.addEventListener( 'pointerdown', onPointerDown );\n        scope.domElement.addEventListener( 'pointercancel', onPointerUp );\n        scope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n        // force an update at start\n\n        this.update();\n\n    }\n    listenToKeyEvents( domElement ) {\n\n        domElement.addEventListener( 'keydown', onKeyDown );\n        this._domElementKeyEvents = domElement;\n\n    };\n    stopListenToKeyEvents() {\n\n        this._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n        this._domElementKeyEvents = null;\n\n    };\n}\n\nexport { OrbitControls };\n","export class LoadingSpinner {\r\n\r\n    constructor(message, container) {\r\n        this.message = message || 'Loading...';\r\n        this.container = container || document.body;\r\n\r\n        this.spinnerDivContainer = document.createElement('div');\r\n        this.spinnerDiv = document.createElement('div');\r\n        this.messageDiv = document.createElement('div');\r\n        this.spinnerDivContainer.className = 'loaderContainer';\r\n        this.spinnerDiv.className = 'loader';\r\n        this.spinnerDivContainer.style.display = 'none';\r\n        this.messageDiv.className = 'message';\r\n        this.messageDiv.innerHTML = this.message;\r\n        this.spinnerDivContainer.appendChild(this.spinnerDiv);\r\n        this.spinnerDivContainer.appendChild(this.messageDiv);\r\n        this.container.appendChild(this.spinnerDivContainer);\r\n\r\n        const style = document.createElement('style');\r\n        style.innerHTML = `\r\n\r\n            .message {\r\n                font-family: arial;\r\n                font-size: 12pt;\r\n                color: #ffffff;\r\n                text-align: center;\r\n                padding-top:15px;\r\n                width: 180px;\r\n            }\r\n\r\n            .loaderContainer {\r\n                position: absolute;\r\n                top: 50%;\r\n                left: 50%;\r\n                transform: translate(-80px, -80px);\r\n                width: 180px;\r\n            }\r\n\r\n            .loader {\r\n                width: 120px;        /* the size */\r\n                padding: 15px;       /* the border thickness */\r\n                background: #07e8d6; /* the color */\r\n                z-index:99999;\r\n            \r\n                aspect-ratio: 1;\r\n                border-radius: 50%;\r\n                --_m: \r\n                    conic-gradient(#0000,#000),\r\n                    linear-gradient(#000 0 0) content-box;\r\n                -webkit-mask: var(--_m);\r\n                    mask: var(--_m);\r\n                -webkit-mask-composite: source-out;\r\n                    mask-composite: subtract;\r\n                box-sizing: border-box;\r\n                animation: load 1s linear infinite;\r\n                margin-left: 30px;\r\n            }\r\n            \r\n            @keyframes load {\r\n                to{transform: rotate(1turn)}\r\n            }\r\n\r\n        `;\r\n        this.spinnerDivContainer.appendChild(style);\r\n    }\r\n\r\n    show() {\r\n        this.spinnerDivContainer.style.display = 'block';\r\n    }\r\n\r\n    hide() {\r\n        this.spinnerDivContainer.style.display = 'none';\r\n    }\r\n\r\n    setMessage(msg) {\r\n        this.messageDiv.innerHTML = msg;\r\n    }\r\n}\r\n","import * as THREE from 'three';\n\nexport class ArrowHelper extends THREE.Object3D {\n\n    constructor(dir = new THREE.Vector3(0, 0, 1), origin = new THREE.Vector3(0, 0, 0), length = 1,\n                radius = 0.1, color = 0xffff00, headLength = length * 0.2, headRadius = headLength * 0.2) {\n        super();\n\n        this.type = 'ArrowHelper';\n\n        const lineGeometry = new THREE.CylinderGeometry(radius, radius, length, 32);\n        lineGeometry.translate(0, length / 2.0, 0);\n        const coneGeometry = new THREE.CylinderGeometry( 0, headRadius, headLength, 32);\n        coneGeometry.translate(0, length, 0);\n\n        this.position.copy( origin );\n\n        this.line = new THREE.Mesh(lineGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n        this.line.matrixAutoUpdate = false;\n        this.add(this.line);\n\n        this.cone = new THREE.Mesh(coneGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n        this.cone.matrixAutoUpdate = false;\n        this.add(this.cone);\n\n        this.setDirection(dir);\n    }\n\n    setDirection( dir ) {\n        if (dir.y > 0.99999) {\n            this.quaternion.set(0, 0, 0, 1);\n        } else if (dir.y < - 0.99999) {\n            this.quaternion.set(1, 0, 0, 0);\n        } else {\n            _axis.set(dir.z, 0, -dir.x).normalize();\n            const radians = Math.acos(dir.y);\n            this.quaternion.setFromAxisAngle(_axis, radians);\n        }\n    }\n\n    setColor( color ) {\n        this.line.material.color.set(color);\n        this.cone.material.color.set(color);\n    }\n\n    copy(source) {\n        super.copy(source, false);\n        this.line.copy(source.line);\n        this.cone.copy(source.cone);\n        return this;\n    }\n\n    dispose() {\n        this.line.geometry.dispose();\n        this.line.material.dispose();\n        this.cone.geometry.dispose();\n        this.cone.material.dispose();\n    }\n\n}\n","import * as THREE from 'three';\r\nimport { ArrowHelper } from './ArrowHelper.js';\r\n\r\nexport class SceneHelper {\r\n\r\n    constructor(scene) {\r\n        this.scene = scene;\r\n        this.splatRenderTarget = null;\r\n        this.renderTargetCopyMaterial = null;\r\n        this.renderTargetCopyQuad = null;\r\n        this.renderTargetCopyCamera = null;\r\n        this.meshCursor = null;\r\n        this.focusMarker = null;\r\n        this.controlPlane = null;\r\n    }\r\n\r\n    updateSplatRenderTargetForRenderDimensions(width, height) {\r\n        this.splatRenderTarget = new THREE.WebGLRenderTarget(width, height, {\r\n            format: THREE.RGBAFormat,\r\n            stencilBuffer: false,\r\n            depthBuffer: true,\r\n\r\n        });\r\n        this.splatRenderTarget.depthTexture = new THREE.DepthTexture(width, height);\r\n        this.splatRenderTarget.depthTexture.format = THREE.DepthFormat;\r\n        this.splatRenderTarget.depthTexture.type = THREE.UnsignedIntType;\r\n    }\r\n\r\n    setupRenderTargetCopyObjects() {\r\n        const uniforms = {\r\n            'sourceColorTexture': {\r\n                'type': 't',\r\n                'value': null\r\n            },\r\n            'sourceDepthTexture': {\r\n                'type': 't',\r\n                'value': null\r\n            },\r\n        };\r\n        this.renderTargetCopyMaterial = new THREE.ShaderMaterial({\r\n            vertexShader: `\r\n                varying vec2 vUv;\r\n                void main() {\r\n                    vUv = uv;\r\n                    gl_Position = vec4( position.xy, 0.0, 1.0 );    \r\n                }\r\n            `,\r\n            fragmentShader: `\r\n                #include <common>\r\n                #include <packing>\r\n                varying vec2 vUv;\r\n                uniform sampler2D sourceColorTexture;\r\n                uniform sampler2D sourceDepthTexture;\r\n                void main() {\r\n                    vec4 color = texture2D(sourceColorTexture, vUv);\r\n                    float fragDepth = texture2D(sourceDepthTexture, vUv).x;\r\n                    gl_FragDepth = fragDepth;\r\n                    gl_FragColor = vec4(color.rgb, color.a * 2.0);\r\n              }\r\n            `,\r\n            uniforms: uniforms,\r\n            depthWrite: false,\r\n            depthTest: false,\r\n            transparent: true,\r\n            blending: THREE.CustomBlending,\r\n            blendSrc: THREE.SrcAlphaFactor,\r\n            blendSrcAlpha: THREE.SrcAlphaFactor,\r\n            blendDst: THREE.OneMinusSrcAlphaFactor,\r\n            blendDstAlpha: THREE.OneMinusSrcAlphaFactor\r\n        });\r\n        this.renderTargetCopyMaterial.extensions.fragDepth = true;\r\n        this.renderTargetCopyQuad = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), this.renderTargetCopyMaterial);\r\n        this.renderTargetCopyCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);\r\n    }\r\n\r\n    setupMeshCursor() {\r\n        if (!this.meshCursor) {\r\n            const coneGeometry = new THREE.ConeGeometry(0.5, 1.5, 32);\r\n            const coneMaterial = new THREE.MeshBasicMaterial({color: 0xFFFFFF});\r\n\r\n            const downArrow = new THREE.Mesh(coneGeometry, coneMaterial);\r\n            downArrow.rotation.set(0, 0, Math.PI);\r\n            downArrow.position.set(0, 1, 0);\r\n            const upArrow = new THREE.Mesh(coneGeometry, coneMaterial);\r\n            upArrow.position.set(0, -1, 0);\r\n            const leftArrow = new THREE.Mesh(coneGeometry, coneMaterial);\r\n            leftArrow.rotation.set(0, 0, Math.PI / 2.0);\r\n            leftArrow.position.set(1, 0, 0);\r\n            const rightArrow = new THREE.Mesh(coneGeometry, coneMaterial);\r\n            rightArrow.rotation.set(0, 0, -Math.PI / 2.0);\r\n            rightArrow.position.set(-1, 0, 0);\r\n\r\n            this.meshCursor = new THREE.Object3D();\r\n            this.meshCursor.add(downArrow);\r\n            this.meshCursor.add(upArrow);\r\n            this.meshCursor.add(leftArrow);\r\n            this.meshCursor.add(rightArrow);\r\n            this.meshCursor.scale.set(0.1, 0.1, 0.1);\r\n            this.scene.add(this.meshCursor);\r\n            this.meshCursor.visible = false;\r\n        }\r\n    }\r\n\r\n    destroyMeshCursor() {\r\n        if (this.meshCursor) {\r\n            this.meshCursor.children.forEach((child) => {\r\n                child.geometry.dispose();\r\n                child.material.dispose();\r\n            });\r\n            this.scene.remove(this.meshCursor);\r\n            this.meshCursor = null;\r\n        }\r\n    }\r\n\r\n    setMeshCursorVisibility(visible) {\r\n        this.meshCursor.visible = visible;\r\n    }\r\n\r\n    setMeshCursorPosition(position) {\r\n        this.meshCursor.position.copy(position);\r\n    }\r\n\r\n    positionAndOrientMeshCursor(position, camera) {\r\n        this.meshCursor.position.copy(position);\r\n        this.meshCursor.up.copy(camera.up);\r\n        this.meshCursor.lookAt(camera.position);\r\n    }\r\n\r\n    setupFocusMarker() {\r\n        if (!this.focusMarker) {\r\n            const sphereGeometry = new THREE.SphereGeometry(.5, 32, 32);\r\n            const focusMarkerMaterial = SceneHelper.buildFocusMarkerMaterial();\r\n            focusMarkerMaterial.depthTest = false;\r\n            focusMarkerMaterial.depthWrite = false;\r\n            focusMarkerMaterial.transparent = true;\r\n            const sphereMesh = new THREE.Mesh(sphereGeometry, focusMarkerMaterial);\r\n            this.focusMarker = sphereMesh;\r\n        }\r\n    }\r\n\r\n    updateFocusMarker = function() {\r\n\r\n        const tempPosition = new THREE.Vector3();\r\n        const tempMatrix = new THREE.Matrix4();\r\n\r\n        return function(position, camera, viewport) {\r\n            tempMatrix.copy(camera.matrixWorld).invert();\r\n            tempPosition.copy(position).applyMatrix4(tempMatrix);\r\n            tempPosition.normalize().multiplyScalar(10);\r\n            tempPosition.applyMatrix4(camera.matrixWorld);\r\n            this.focusMarker.position.copy(tempPosition);\r\n            this.focusMarker.material.uniforms.realFocusPosition.value.copy(position);\r\n            this.focusMarker.material.uniforms.viewport.value.copy(viewport);\r\n            this.focusMarker.material.uniformsNeedUpdate = true;\r\n        };\r\n\r\n    }();\r\n\r\n    setFocusMarkerVisibility(visible) {\r\n        this.focusMarker.visible = visible;\r\n    }\r\n\r\n    setFocusMarkerOpacity(opacity) {\r\n        this.focusMarker.material.uniforms.opacity.value = opacity;\r\n        this.focusMarker.material.uniformsNeedUpdate = true;\r\n    }\r\n\r\n    getFocusMarkerOpacity() {\r\n        return this.focusMarker.material.uniforms.opacity.value;\r\n    }\r\n\r\n    setupControlPlane() {\r\n        const planeGeometry = new THREE.PlaneGeometry(1, 1);\r\n        planeGeometry.rotateX(-Math.PI / 2);\r\n        const planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff});\r\n        planeMaterial.transparent = true;\r\n        planeMaterial.opacity = 0.6;\r\n        planeMaterial.depthTest = false;\r\n        planeMaterial.depthWrite = false;\r\n        planeMaterial.side = THREE.DoubleSide;\r\n        const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);\r\n\r\n        const arrowDir = new THREE.Vector3(0, 1, 0);\r\n        arrowDir.normalize();\r\n        const arrowOrigin = new THREE.Vector3(0, 0, 0);\r\n        const arrowLength = 0.5;\r\n        const arrowRadius = 0.01;\r\n        const arrowColor = 0x00dd00;\r\n        const arrowHelper = new ArrowHelper(arrowDir, arrowOrigin, arrowLength, arrowRadius, arrowColor, 0.1, 0.03);\r\n\r\n        this.controlPlane = new THREE.Object3D();\r\n        this.controlPlane.add(planeMesh);\r\n        this.controlPlane.add(arrowHelper);\r\n    }\r\n\r\n    setControlPlaneVisibility(visible) {\r\n        this.controlPlane.visible = visible;\r\n    }\r\n\r\n    positionAndOrientControlPlane = function() {\r\n\r\n        const tempQuaternion = new THREE.Quaternion();\r\n        const defaultUp = new THREE.Vector3(0, 1, 0);\r\n\r\n        return function(position, up) {\r\n            tempQuaternion.setFromUnitVectors(defaultUp, up);\r\n            this.controlPlane.position.copy(position);\r\n            this.controlPlane.quaternion.copy(tempQuaternion);\r\n        };\r\n\r\n    }();\r\n\r\n    addDebugMeshes() {\r\n        this.debugRoot = this.createDebugMeshes();\r\n        this.secondaryDebugRoot = this.createSecondaryDebugMeshes();\r\n        this.scene.add(this.debugRoot);\r\n        this.scene.add(this.secondaryDebugRoot);\r\n    }\r\n\r\n    createDebugMeshes(renderOrder) {\r\n        const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);\r\n        const debugMeshRoot = new THREE.Object3D();\r\n\r\n        const createMesh = (color, position) => {\r\n            let sphereMesh = new THREE.Mesh(sphereGeometry, SceneHelper.buildDebugMaterial(color));\r\n            sphereMesh.renderOrder = renderOrder;\r\n            debugMeshRoot.add(sphereMesh);\r\n            sphereMesh.position.fromArray(position);\r\n        };\r\n\r\n        createMesh(0xff0000, [-50, 0, 0]);\r\n        createMesh(0xff0000, [50, 0, 0]);\r\n        createMesh(0x00ff00, [0, 0, -50]);\r\n        createMesh(0x00ff00, [0, 0, 50]);\r\n        createMesh(0xffaa00, [5, 0, 5]);\r\n\r\n        return debugMeshRoot;\r\n    }\r\n\r\n    createSecondaryDebugMeshes(renderOrder) {\r\n        const boxGeometry = new THREE.BoxGeometry(3, 3, 3);\r\n        const debugMeshRoot = new THREE.Object3D();\r\n\r\n        let boxColor = 0xBBBBBB;\r\n        const createMesh = (position) => {\r\n            let boxMesh = new THREE.Mesh(boxGeometry, SceneHelper.buildDebugMaterial(boxColor));\r\n            boxMesh.renderOrder = renderOrder;\r\n            debugMeshRoot.add(boxMesh);\r\n            boxMesh.position.fromArray(position);\r\n        };\r\n\r\n        let separation = 10;\r\n        createMesh([-separation, 0, -separation]);\r\n        createMesh([-separation, 0, separation]);\r\n        createMesh([separation, 0, -separation]);\r\n        createMesh([separation, 0, separation]);\r\n\r\n        return debugMeshRoot;\r\n    }\r\n\r\n    static buildDebugMaterial(color) {\r\n        const vertexShaderSource = `\r\n            #include <common>\r\n            varying float ndcDepth;\r\n\r\n            void main() {\r\n                gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position.xyz, 1.0);\r\n                ndcDepth = gl_Position.z / gl_Position.w;\r\n                gl_Position.x = gl_Position.x / gl_Position.w;\r\n                gl_Position.y = gl_Position.y / gl_Position.w;\r\n                gl_Position.z = 0.0;\r\n                gl_Position.w = 1.0;\r\n    \r\n            }\r\n        `;\r\n\r\n        const fragmentShaderSource = `\r\n            #include <common>\r\n            uniform vec3 color;\r\n            varying float ndcDepth;\r\n            void main() {\r\n                gl_FragDepth = (ndcDepth + 1.0) / 2.0;\r\n                gl_FragColor = vec4(color.rgb, 0.0);\r\n            }\r\n        `;\r\n\r\n        const uniforms = {\r\n            'color': {\r\n                'type': 'v3',\r\n                'value': new THREE.Color(color)\r\n            },\r\n        };\r\n\r\n        const material = new THREE.ShaderMaterial({\r\n            uniforms: uniforms,\r\n            vertexShader: vertexShaderSource,\r\n            fragmentShader: fragmentShaderSource,\r\n            transparent: false,\r\n            depthTest: true,\r\n            depthWrite: true,\r\n            side: THREE.FrontSide\r\n        });\r\n        material.extensions.fragDepth = true;\r\n\r\n        return material;\r\n    }\r\n\r\n    static buildFocusMarkerMaterial(color) {\r\n        const vertexShaderSource = `\r\n            #include <common>\r\n\r\n            uniform vec2 viewport;\r\n            uniform vec3 realFocusPosition;\r\n\r\n            varying vec4 ndcPosition;\r\n            varying vec4 ndcCenter;\r\n            varying vec4 ndcFocusPosition;\r\n\r\n            void main() {\r\n                float radius = 0.01;\r\n\r\n                vec4 viewPosition = modelViewMatrix * vec4(position.xyz, 1.0);\r\n                vec4 viewCenter = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);\r\n\r\n                vec4 viewFocusPosition = modelViewMatrix * vec4(realFocusPosition, 1.0);\r\n\r\n                ndcPosition = projectionMatrix * viewPosition;\r\n                ndcPosition = ndcPosition * vec4(1.0 / ndcPosition.w);\r\n                ndcCenter = projectionMatrix * viewCenter;\r\n                ndcCenter = ndcCenter * vec4(1.0 / ndcCenter.w);\r\n\r\n                ndcFocusPosition = projectionMatrix * viewFocusPosition;\r\n                ndcFocusPosition = ndcFocusPosition * vec4(1.0 / ndcFocusPosition.w);\r\n\r\n                gl_Position = projectionMatrix * viewPosition;\r\n\r\n            }\r\n        `;\r\n\r\n        const fragmentShaderSource = `\r\n            #include <common>\r\n            uniform vec3 color;\r\n            uniform vec2 viewport;\r\n            uniform float opacity;\r\n\r\n            varying vec4 ndcPosition;\r\n            varying vec4 ndcCenter;\r\n            varying vec4 ndcFocusPosition;\r\n\r\n            void main() {\r\n                vec2 screenPosition = vec2(ndcPosition) * viewport;\r\n                vec2 screenCenter = vec2(ndcCenter) * viewport;\r\n\r\n                vec2 screenVec = screenPosition - screenCenter;\r\n\r\n                float projectedRadius = length(screenVec);\r\n\r\n                float lineWidth = 0.0005 * viewport.y;\r\n                float aaRange = 0.0025 * viewport.y;\r\n                float radius = 0.06 * viewport.y;\r\n                float radDiff = abs(projectedRadius - radius) - lineWidth;\r\n                float alpha = 1.0 - clamp(radDiff / 5.0, 0.0, 1.0); \r\n\r\n                gl_FragColor = vec4(color.rgb, alpha * opacity);\r\n            }\r\n        `;\r\n\r\n        const uniforms = {\r\n            'color': {\r\n                'type': 'v3',\r\n                'value': new THREE.Color(color)\r\n            },\r\n            'realFocusPosition': {\r\n                'type': 'v3',\r\n                'value': new THREE.Vector3()\r\n            },\r\n            'viewport': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2()\r\n            },\r\n            'opacity': {\r\n                'value': 0.0\r\n            }\r\n        };\r\n\r\n        const material = new THREE.ShaderMaterial({\r\n            uniforms: uniforms,\r\n            vertexShader: vertexShaderSource,\r\n            fragmentShader: fragmentShaderSource,\r\n            transparent: true,\r\n            depthTest: false,\r\n            depthWrite: false,\r\n            side: THREE.FrontSide\r\n        });\r\n\r\n        return material;\r\n    }\r\n}\r\n","import * as THREE from 'three';\r\n\r\nconst VectorRight = new THREE.Vector3(1, 0, 0);\r\nconst VectorUp = new THREE.Vector3(0, 1, 0);\r\nconst VectorBackward = new THREE.Vector3(0, 0, 1);\r\n\r\nexport class Ray {\r\n\r\n    constructor(origin = new THREE.Vector3(), direction = new THREE.Vector3()) {\r\n        this.origin = new THREE.Vector3();\r\n        this.direction = new THREE.Vector3();\r\n        this.setParameters(origin, direction);\r\n    }\r\n\r\n    setParameters(origin, direction) {\r\n        this.origin.copy(origin);\r\n        this.direction.copy(direction).normalize();\r\n    }\r\n\r\n    boxContainsPoint(box, point, epsilon) {\r\n        return point.x < box.min.x - epsilon || point.x > box.max.x + epsilon ||\r\n               point.y < box.min.y - epsilon || point.y > box.max.y + epsilon ||\r\n               point.z < box.min.z - epsilon || point.z > box.max.z + epsilon ? false : true;\r\n    }\r\n\r\n    intersectBox = function() {\r\n\r\n        const planeIntersectionPoint = new THREE.Vector3();\r\n        const planeIntersectionPointArray = [];\r\n        const originArray = [];\r\n        const directionArray = [];\r\n\r\n        return function(box, outHit) {\r\n\r\n            originArray[0] = this.origin.x;\r\n            originArray[1] = this.origin.y;\r\n            originArray[2] = this.origin.z;\r\n            directionArray[0] = this.direction.x;\r\n            directionArray[1] = this.direction.y;\r\n            directionArray[2] = this.direction.z;\r\n\r\n            if (this.boxContainsPoint(box, this.origin, 0.0001)) {\r\n                if (outHit) {\r\n                    outHit.origin.copy(this.origin);\r\n                    outHit.normal.set(0, 0, 0);\r\n                    outHit.distance = -1;\r\n                }\r\n                return true;\r\n            }\r\n\r\n            for (let i = 0; i < 3; i++) {\r\n                if (directionArray[i] == 0.0) continue;\r\n\r\n                const hitNormal = i == 0 ? VectorRight : i == 1 ? VectorUp : VectorBackward;\r\n                const extremeVec = directionArray[i] < 0 ? box.max : box.min;\r\n                let multiplier = -Math.sign(directionArray[i]);\r\n                planeIntersectionPointArray[0] = i == 0 ? extremeVec.x : i == 1 ? extremeVec.y : extremeVec.z;\r\n                let toSide = planeIntersectionPointArray[0] - originArray[i];\r\n\r\n                if (toSide * multiplier < 0) {\r\n                    const idx1 = (i + 1) % 3;\r\n                    const idx2 = (i + 2) % 3;\r\n                    planeIntersectionPointArray[2] = directionArray[idx1] / directionArray[i] * toSide + originArray[idx1];\r\n                    planeIntersectionPointArray[1] = directionArray[idx2] / directionArray[i] * toSide + originArray[idx2];\r\n                    planeIntersectionPoint.set(planeIntersectionPointArray[i],\r\n                                               planeIntersectionPointArray[idx2],\r\n                                               planeIntersectionPointArray[idx1]);\r\n                    if (this.boxContainsPoint(box, planeIntersectionPoint, 0.0001)) {\r\n                        if (outHit) {\r\n                            outHit.origin.copy(planeIntersectionPoint);\r\n                            outHit.normal.copy(hitNormal).multiplyScalar(multiplier);\r\n                            outHit.distance = planeIntersectionPoint.sub(this.origin).length();\r\n                        }\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return false;\r\n        };\r\n\r\n    }();\r\n\r\n    intersectSphere = function() {\r\n\r\n        const toSphereCenterVec = new THREE.Vector3();\r\n\r\n        return function(center, radius, outHit) {\r\n            toSphereCenterVec.copy(center).sub(this.origin);\r\n            const toClosestApproach = toSphereCenterVec.dot(this.direction);\r\n            const toClosestApproachSq = toClosestApproach * toClosestApproach;\r\n            const toSphereCenterSq = toSphereCenterVec.dot(toSphereCenterVec);\r\n            const diffSq = toSphereCenterSq - toClosestApproachSq;\r\n            const radiusSq = radius * radius;\r\n\r\n            if (diffSq > radiusSq) return false;\r\n\r\n            const thc = Math.sqrt(radiusSq - diffSq);\r\n            const t0 = toClosestApproach - thc;\r\n            const t1 = toClosestApproach + thc;\r\n\r\n            if (t1 < 0) return false;\r\n            let t = t0 < 0 ? t1 : t0;\r\n\r\n            if (outHit) {\r\n                outHit.origin.copy(this.origin).addScaledVector(this.direction, t);\r\n                outHit.normal.copy(outHit.origin).sub(center).normalize();\r\n                outHit.distance = t;\r\n            }\r\n            return true;\r\n        };\r\n\r\n    }();\r\n}\r\n","import * as THREE from 'three';\r\n\r\nexport class Hit {\r\n\r\n    constructor() {\r\n        this.origin = new THREE.Vector3();\r\n        this.normal = new THREE.Vector3();\r\n        this.distance = 0;\r\n    }\r\n\r\n    set(origin, normal, distance) {\r\n        this.origin.copy(origin);\r\n        this.normal.copy(normal);\r\n        this.distance = distance;\r\n    }\r\n\r\n    clone() {\r\n        const hitClone = new Hit();\r\n        hitClone.origin.copy(this.origin);\r\n        hitClone.normal.copy(this.normal);\r\n        hitClone.distance = this.distance;\r\n        return hitClone;\r\n    }\r\n\r\n}\r\n","import * as THREE from 'three';\nimport { Ray } from './Ray.js';\nimport { Hit } from './Hit.js';\n\nexport class Raycaster {\n\n    constructor(origin, direction) {\n        this.ray = new Ray(origin, direction);\n        this.setFromCameraAndScreenPosition = function() {\n\n            const ndcCoords = new THREE.Vector2();\n\n            return function(camera, screenPosition, screenDimensions) {\n                ndcCoords.x = screenPosition.x / screenDimensions.x * 2.0 - 1.0;\n                ndcCoords.y = (screenDimensions.y - screenPosition.y) / screenDimensions.y * 2.0 - 1.0;\n                if (camera.isPerspectiveCamera) {\n                    this.ray.origin.setFromMatrixPosition(camera.matrixWorld);\n                    this.ray.direction.set(ndcCoords.x, ndcCoords.y, 0.5 ).unproject(camera).sub(this.ray.origin).normalize();\n                    this.camera = camera;\n                } else if (camera.isOrthographicCamera) {\n                    this.ray.origin.set(screenPosition.x, screenPosition.y,\n                                       (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera);\n                    this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld);\n                    this.camera = camera;\n                } else {\n                    throw new Error('Raycaster::setFromCameraAndScreenPosition() -> Unsupported camera type');\n                }\n            };\n\n        }();\n        this.intersectSplatMesh = function intersectSplatMesh() {\n\n            const toLocal = new THREE.Matrix4();\n            const fromLocal = new THREE.Matrix4();\n            const localRay = new Ray();\n\n            return function(splatMesh, outHits = []) {\n                fromLocal.copy(splatMesh.matrixWorld);\n                toLocal.copy(fromLocal).invert();\n                localRay.origin.copy(this.ray.origin).applyMatrix4(toLocal);\n                localRay.direction.copy(this.ray.direction).transformDirection(toLocal);\n\n                const splatTree = splatMesh.getSplatTree();\n                if (splatTree.rootNode) {\n                    this.castRayAtSplatTreeNode(localRay, splatTree, splatTree.rootNode, outHits);\n                }\n                outHits.sort((a, b) => {\n                    if (a.distance > b.distance) return 1;\n                    else return -1;\n                });\n                outHits.forEach((hit) => {\n                    hit.origin.applyMatrix4(fromLocal);\n                    hit.normal.transformDirection(fromLocal);\n                });\n                return outHits;\n            };\n\n        }();\n        this.castRayAtSplatTreeNode = function castRayAtSplatTreeNode() {\n\n            const tempPosition = new THREE.Vector3();\n            const tempScale = new THREE.Vector3();\n            const tempRotation = new THREE.Quaternion();\n            const tempHit = new Hit();\n            const scaleEpsilon = 0.0000001;\n\n            // Used for raycasting against splat ellipsoid\n            /*\n            const origin = new THREE.Vector3(0, 0, 0);\n            const tempRotationMatrix = new THREE.Matrix4();\n            const tempScaleMatrix = new THREE.Matrix4();\n            const toSphereSpace = new THREE.Matrix4();\n            const fromSphereSpace = new THREE.Matrix4();\n            const tempRay = new Ray();\n            */\n\n            return function(ray, splatTree, node, outHits = []) {\n                if (!ray.intersectBox(node.boundingBox)) {\n                    return;\n                }\n                if (node.data.indexes && node.data.indexes.length > 0) {\n                    for (let i = 0; i < node.data.indexes.length; i++) {\n                        const splatIndex = node.data.indexes[i];\n                        splatTree.splatBuffer.getPosition(splatIndex, tempPosition);\n                        splatTree.splatBuffer.getRotation(splatIndex, tempRotation);\n                        splatTree.splatBuffer.getScale(splatIndex, tempScale);\n\n                        if (tempScale.x <= scaleEpsilon || tempScale.y <= scaleEpsilon || tempScale.z <= scaleEpsilon) {\n                            continue;\n                        }\n\n                        // Simple approximated sphere intersection\n                        const radius = (tempScale.x + tempScale.y + tempScale.z) / 3;\n                        if (ray.intersectSphere(tempPosition, radius, tempHit)) {\n                            outHits.push(tempHit.clone());\n                        }\n\n                        // Raycast against actual splat ellipsoid ... doesn't actually work as well\n                        // as the approximated sphere approach\n                        /*\n                        tempScaleMatrix.makeScale(tempScale.x, tempScale.y, tempScale.z);\n                        tempRotationMatrix.makeRotationFromQuaternion(tempRotation);\n                        fromSphereSpace.copy(tempScaleMatrix).premultiply(tempRotationMatrix);\n                        toSphereSpace.copy(fromSphereSpace).invert();\n                        tempRay.origin.copy(this.ray.origin).sub(tempPosition).applyMatrix4(toSphereSpace);\n                        tempRay.direction.copy(this.ray.direction).transformDirection(toSphereSpace).normalize();\n                        if (tempRay.intersectSphere(origin, 1.0, tempHit)) {\n                            const hitClone = tempHit.clone();\n                            hitClone.origin.applyMatrix4(fromSphereSpace).add(tempPosition);\n                            outHits.push(hitClone);\n                        }\n                        */\n\n                    }\n                 }\n                if (node.children && node.children.length > 0) {\n                    for (let child of node.children) {\n                        this.castRayAtSplatTreeNode(ray, splatTree, child, outHits);\n                    }\n                }\n                return outHits;\n            };\n\n        }();\n    }\n\n    setFromCameraAndScreenPosition(camera, screenPosition, screenDimensions) {\n\n    }\n\n    intersectSplatMesh(splatMesh, outHits = []) {\n\n    }\n\n    castRayAtSplatTreeNode(ray, splatTree, node, outHits = []) {\n\n    }\n}\n","import * as THREE from 'three';\r\n\r\nlet idGen = 0;\r\n\r\nexport class SplatTreeNode {\r\n\r\n    constructor(min, max, depth, id) {\r\n        this.min = new THREE.Vector3().copy(min);\r\n        this.max = new THREE.Vector3().copy(max);\r\n        this.boundingBox = new THREE.Box3(this.min, this.max);\r\n        this.center = new THREE.Vector3().copy(this.max).sub(this.min).multiplyScalar(0.5).add(this.min);\r\n        this.depth = depth;\r\n        this.children = [];\r\n        this.data = null;\r\n        this.id = id || idGen++;\r\n    }\r\n\r\n}\r\n","import * as THREE from 'three';\r\nimport { SplatTreeNode } from './SplatTreeNode.js';\r\n\r\nexport class SplatTree {\r\n\r\n    constructor(maxDepth, maxPositionsPerNode) {\r\n        this.maxDepth = maxDepth;\r\n        this.maxPositionsPerNode = maxPositionsPerNode;\r\n        this.splatBuffer = null;\r\n        this.sceneDimensions = new THREE.Vector3();\r\n        this.sceneMin = new THREE.Vector3();\r\n        this.sceneMax = new THREE.Vector3();\r\n        this.rootNode = null;\r\n        this.addedIndexes = {};\r\n        this.nodesWithIndexes = [];\r\n    }\r\n\r\n    processSplatBuffer(splatBuffer, filterFunc = () => true) {\r\n        this.splatBuffer = splatBuffer;\r\n        this.addedIndexes = {};\r\n        this.nodesWithIndexes = [];\r\n        const splatCount = splatBuffer.getSplatCount();\r\n\r\n        const position = new THREE.Vector3();\r\n        for (let i = 0; i < splatCount; i++) {\r\n            if (filterFunc(i)) {\r\n                splatBuffer.getPosition(i, position);\r\n                if (i === 0 || position.x < this.sceneMin.x) this.sceneMin.x = position.x;\r\n                if (i === 0 || position.x > this.sceneMax.x) this.sceneMax.x = position.x;\r\n                if (i === 0 || position.y < this.sceneMin.y) this.sceneMin.y = position.y;\r\n                if (i === 0 || position.y > this.sceneMax.y) this.sceneMax.y = position.y;\r\n                if (i === 0 || position.z < this.sceneMin.z) this.sceneMin.z = position.z;\r\n                if (i === 0 || position.z > this.sceneMax.z) this.sceneMax.z = position.z;\r\n            }\r\n        }\r\n\r\n        this.sceneDimensions.copy(this.sceneMin).sub(this.sceneMin);\r\n\r\n        const indexes = [];\r\n        for (let i = 0; i < splatCount; i ++) {\r\n            if (filterFunc(i)) {\r\n                indexes.push(i);\r\n            }\r\n        }\r\n        this.rootNode = new SplatTreeNode(this.sceneMin, this.sceneMax, 0);\r\n        this.rootNode.data = {\r\n            'indexes': indexes\r\n        };\r\n        this.processNode(this.rootNode, splatBuffer);\r\n    }\r\n\r\n    processNode(node, splatBuffer) {\r\n        const splatCount = node.data.indexes.length;\r\n\r\n        if (splatCount < this.maxPositionsPerNode || node.depth > this.maxDepth) {\r\n            const newIndexes = [];\r\n            for (let i = 0; i < node.data.indexes.length; i++) {\r\n                if (!this.addedIndexes[node.data.indexes[i]]) {\r\n                    newIndexes.push(node.data.indexes[i]);\r\n                    this.addedIndexes[node.data.indexes[i]] = true;\r\n                }\r\n            }\r\n            node.data.indexes = newIndexes;\r\n            this.nodesWithIndexes.push(node);\r\n            return;\r\n        }\r\n\r\n        const nodeDimensions = new THREE.Vector3().copy(node.max).sub(node.min);\r\n        const halfDimensions = new THREE.Vector3().copy(nodeDimensions).multiplyScalar(0.5);\r\n\r\n        const nodeCenter = new THREE.Vector3().copy(node.min).add(halfDimensions);\r\n\r\n        const childrenBounds = [\r\n            // top section, clockwise from upper-left (looking from above, +Y)\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x - halfDimensions.x, nodeCenter.y, nodeCenter.z - halfDimensions.z),\r\n                           new THREE.Vector3(nodeCenter.x, nodeCenter.y + halfDimensions.y, nodeCenter.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x, nodeCenter.y, nodeCenter.z - halfDimensions.z),\r\n                           new THREE.Vector3(nodeCenter.x + halfDimensions.x, nodeCenter.y + halfDimensions.y, nodeCenter.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x, nodeCenter.y, nodeCenter.z),\r\n                           new THREE.Vector3(nodeCenter.x + halfDimensions.x,\r\n                                             nodeCenter.y + halfDimensions.y, nodeCenter.z + halfDimensions.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x - halfDimensions.x, nodeCenter.y, nodeCenter.z ),\r\n                           new THREE.Vector3(nodeCenter.x, nodeCenter.y + halfDimensions.y, nodeCenter.z + halfDimensions.z)),\r\n\r\n            // bottom section, clockwise from lower-left (looking from above, +Y)\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x - halfDimensions.x,\r\n                                             nodeCenter.y - halfDimensions.y, nodeCenter.z - halfDimensions.z),\r\n                           new THREE.Vector3(nodeCenter.x, nodeCenter.y, nodeCenter.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x, nodeCenter.y - halfDimensions.y, nodeCenter.z - halfDimensions.z),\r\n                           new THREE.Vector3(nodeCenter.x + halfDimensions.x, nodeCenter.y, nodeCenter.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x, nodeCenter.y - halfDimensions.y, nodeCenter.z),\r\n                           new THREE.Vector3(nodeCenter.x + halfDimensions.x, nodeCenter.y, nodeCenter.z + halfDimensions.z)),\r\n            new THREE.Box3(new THREE.Vector3(nodeCenter.x - halfDimensions.x, nodeCenter.y - halfDimensions.y, nodeCenter.z),\r\n                           new THREE.Vector3(nodeCenter.x, nodeCenter.y, nodeCenter.z + halfDimensions.z)),\r\n        ];\r\n\r\n        const splatCounts = [];\r\n        const baseIndexes = [];\r\n        for (let i = 0; i < childrenBounds.length; i++) {\r\n            splatCounts[i] = 0;\r\n            baseIndexes[i] = [];\r\n        }\r\n\r\n        const position = new THREE.Vector3();\r\n        for (let i = 0; i < splatCount; i++) {\r\n            const splatIndex = node.data.indexes[i];\r\n            splatBuffer.getPosition(splatIndex, position);\r\n            for (let j = 0; j < childrenBounds.length; j++) {\r\n                if (childrenBounds[j].containsPoint(position)) {\r\n                    splatCounts[j]++;\r\n                    baseIndexes[j].push(splatIndex);\r\n                }\r\n            }\r\n        }\r\n\r\n        for (let i = 0; i < childrenBounds.length; i++) {\r\n            const childNode = new SplatTreeNode(childrenBounds[i].min, childrenBounds[i].max, node.depth + 1);\r\n            childNode.data = {\r\n                'indexes': baseIndexes[i]\r\n            };\r\n            node.children.push(childNode);\r\n        }\r\n\r\n        node.data = {};\r\n        for (let child of node.children) {\r\n            this.processNode(child, splatBuffer);\r\n        }\r\n    }\r\n\r\n\r\n    countLeaves() {\r\n\r\n        let leafCount = 0;\r\n        this.visitLeaves(() => {\r\n            leafCount++;\r\n        });\r\n\r\n        return leafCount;\r\n    }\r\n\r\n    visitLeaves(visitFunc) {\r\n\r\n        const visitLeavesFromNode = (node, visitFunc) => {\r\n            if (node.children.length === 0) visitFunc(node);\r\n            for (let child of node.children) {\r\n                visitLeavesFromNode(child, visitFunc);\r\n            }\r\n        };\r\n\r\n        return visitLeavesFromNode(this.rootNode, visitFunc);\r\n    }\r\n\r\n}\r\n","import * as THREE from 'three';\r\nimport { SplatTree } from './splattree/SplatTree.js';\r\nimport { uintEncodedFloat, rgbaToInteger } from './Util.js';\r\n\r\nexport class SplatMesh extends THREE.Mesh {\r\n\r\n    static buildMesh(splatBuffer, splatAlphaRemovalThreshold = 1, halfPrecisionCovariancesOnGPU = false, devicePixelRatio = 1) {\r\n        const geometry = SplatMesh.buildGeomtery(splatBuffer);\r\n        const material = SplatMesh.buildMaterial();\r\n        return new SplatMesh(splatBuffer, geometry, material, splatAlphaRemovalThreshold, halfPrecisionCovariancesOnGPU, devicePixelRatio);\r\n    }\r\n\r\n    constructor(splatBuffer, geometry, material, splatAlphaRemovalThreshold = 1,\r\n                halfPrecisionCovariancesOnGPU = false, devicePixelRatio = 1) {\r\n        super(geometry, material);\r\n        this.splatBuffer = splatBuffer;\r\n        this.geometry = geometry;\r\n        this.material = material;\r\n        this.splatTree = null;\r\n        this.splatDataTextures = null;\r\n        this.splatAlphaRemovalThreshold = splatAlphaRemovalThreshold;\r\n        this.halfPrecisionCovariancesOnGPU = halfPrecisionCovariancesOnGPU;\r\n        this.devicePixelRatio = devicePixelRatio;\r\n        this.buildSplatTree();\r\n        this.resetLocalSplatDataAndTexturesFromSplatBuffer();\r\n    }\r\n\r\n    static buildMaterial() {\r\n\r\n        const vertexShaderSource = `\r\n            precision highp float;\r\n            #include <common>\r\n\r\n            attribute uint splatIndex;\r\n\r\n            uniform highp sampler2D covariancesTexture;\r\n            uniform highp usampler2D centersColorsTexture;\r\n            uniform vec2 focal;\r\n            uniform vec2 viewport;\r\n            uniform vec2 basisViewport;\r\n            uniform vec2 covariancesTextureSize;\r\n            uniform vec2 centersColorsTextureSize;\r\n\r\n            varying vec4 vColor;\r\n            varying vec2 vUv;\r\n\r\n            varying vec2 vPosition;\r\n\r\n            const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);\r\n            const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000));\r\n            const uvec4 shift4 = uvec4(0, 8, 16, 24);\r\n            vec4 uintToRGBAVec (uint u) {\r\n               uvec4 urgba = mask4 & u;\r\n               urgba = urgba >> shift4;\r\n               vec4 rgba = vec4(urgba) * encodeNorm4;\r\n               return rgba;\r\n            }\r\n\r\n            vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) {\r\n                vec2 samplerUV = vec2(0.0, 0.0);\r\n                float d = float(splatIndex * uint(stride) + uint(offset)) / dimensions.x;\r\n                samplerUV.y = float(floor(d)) / dimensions.y;\r\n                samplerUV.x = fract(d);\r\n                return samplerUV;\r\n            }\r\n\r\n            void main () {\r\n                uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize));\r\n                vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba));\r\n                vColor = uintToRGBAVec(sampledCenterColor.r);\r\n\r\n                vPosition = position.xy * 2.0;\r\n\r\n                vec4 viewCenter = modelViewMatrix * vec4(splatCenter, 1.0);\r\n                vec4 clipCenter = projectionMatrix * viewCenter;\r\n\r\n                vec2 sampledCovarianceA = texture(covariancesTexture, getDataUV(3, 0, covariancesTextureSize)).rg;\r\n                vec2 sampledCovarianceB = texture(covariancesTexture, getDataUV(3, 1, covariancesTextureSize)).rg;\r\n                vec2 sampledCovarianceC = texture(covariancesTexture, getDataUV(3, 2, covariancesTextureSize)).rg;\r\n\r\n                vec3 cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rg, sampledCovarianceB.r);\r\n                vec3 cov3D_M22_M23_M33 = vec3(sampledCovarianceB.g, sampledCovarianceC.rg);\r\n\r\n                // Compute the 2D covariance matrix from the upper-right portion of the 3D covariance matrix\r\n                mat3 Vrk = mat3(\r\n                    cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z,\r\n                    cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y,\r\n                    cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z\r\n                );\r\n                float s = 1.0 / (viewCenter.z * viewCenter.z);\r\n                mat3 J = mat3(\r\n                    focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s,\r\n                    0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s,\r\n                    0., 0., 0.\r\n                );\r\n                mat3 W = transpose(mat3(modelViewMatrix));\r\n                mat3 T = W * J;\r\n                mat3 cov2Dm = transpose(T) * Vrk * T;\r\n                cov2Dm[0][0] += 0.3;\r\n                cov2Dm[1][1] += 0.3;\r\n\r\n                // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because\r\n                // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0],\r\n                // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't\r\n                // need cov2Dm[1][0] because it is a symetric matrix.\r\n                vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]);\r\n\r\n                vec3 ndcCenter = clipCenter.xyz / clipCenter.w;\r\n\r\n                // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix\r\n                // so that we can determine the 2D basis for the splat. This is done using the method described\r\n                // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html\r\n                //\r\n                // This is a different approach than in the original work at INRIA. In that work they compute the\r\n                // max extents of the 2D covariance matrix in screen space to form an axis aligned bounding rectangle\r\n                // which forms the geometry that is actually rasterized. They then use the inverse 2D covariance\r\n                // matrix (called 'conic') to determine fragment opacity.\r\n                float a = cov2Dv.x;\r\n                float d = cov2Dv.z;\r\n                float b = cov2Dv.y;\r\n                float D = a * d - b * b;\r\n                float trace = a + d;\r\n                float traceOver2 = 0.5 * trace;\r\n                float term2 = sqrt(trace * trace / 4.0 - D);\r\n                float eigenValue1 = traceOver2 + term2;\r\n                float eigenValue2 = max(traceOver2 - term2, 0.00); // prevent negative eigen value\r\n\r\n                const float maxSplatSize = 1024.0;\r\n                vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a));\r\n                // since the eigen vectors are orthogonal, we derive the second one from the first\r\n                vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x);\r\n                vec2 basisVector1 = eigenVector1 * min(sqrt(2.0 * eigenValue1), maxSplatSize);\r\n                vec2 basisVector2 = eigenVector2 * min(sqrt(2.0 * eigenValue2), maxSplatSize);\r\n\r\n                vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) * basisViewport;\r\n\r\n                gl_Position = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\r\n            }`;\r\n\r\n        const fragmentShaderSource = `\r\n            precision highp float;\r\n            #include <common>\r\n\r\n            uniform vec3 debugColor;\r\n\r\n            varying vec4 vColor;\r\n            varying vec2 vUv;\r\n\r\n            varying vec2 vPosition;\r\n\r\n            void main () {\r\n                // compute the negative squared distance from the center of the splat to the\r\n                // current fragment in the splat's local space.\r\n                float A = -dot(vPosition, vPosition);\r\n                if (A < -4.0) discard;\r\n                vec3 color = vColor.rgb;\r\n                A = exp(A) * vColor.a;\r\n                gl_FragColor = vec4(color.rgb, A);\r\n            }`;\r\n\r\n        const uniforms = {\r\n            'covariancesTexture': {\r\n                'type': 't',\r\n                'value': null\r\n            },\r\n            'centersColorsTexture': {\r\n                'type': 't',\r\n                'value': null\r\n            },\r\n            'focal': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2()\r\n            },\r\n            'viewport': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2()\r\n            },\r\n            'basisViewport': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2()\r\n            },\r\n            'debugColor': {\r\n                'type': 'v3',\r\n                'value': new THREE.Color()\r\n            },\r\n            'covariancesTextureSize': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2(1024, 1024)\r\n            },\r\n            'centersColorsTextureSize': {\r\n                'type': 'v2',\r\n                'value': new THREE.Vector2(1024, 1024)\r\n            }\r\n        };\r\n\r\n        const material = new THREE.ShaderMaterial({\r\n            uniforms: uniforms,\r\n            vertexShader: vertexShaderSource,\r\n            fragmentShader: fragmentShaderSource,\r\n            transparent: true,\r\n            alphaTest: 1.0,\r\n            blending: THREE.NormalBlending,\r\n            depthTest: true,\r\n            depthWrite: false,\r\n            side: THREE.DoubleSide\r\n        });\r\n\r\n        return material;\r\n    }\r\n\r\n    static buildGeomtery(splatBuffer) {\r\n\r\n        const splatCount = splatBuffer.getSplatCount();\r\n\r\n        const baseGeometry = new THREE.BufferGeometry();\r\n        baseGeometry.setIndex([0, 1, 2, 0, 2, 3]);\r\n\r\n        const positionsArray = new Float32Array(4 * 3);\r\n        const positions = new THREE.BufferAttribute(positionsArray, 3);\r\n        baseGeometry.setAttribute('position', positions);\r\n        positions.setXYZ(0, -1.0, -1.0, 0.0);\r\n        positions.setXYZ(1, -1.0, 1.0, 0.0);\r\n        positions.setXYZ(2, 1.0, 1.0, 0.0);\r\n        positions.setXYZ(3, 1.0, -1.0, 0.0);\r\n        positions.needsUpdate = true;\r\n\r\n        const geometry = new THREE.InstancedBufferGeometry().copy(baseGeometry);\r\n\r\n        const splatIndexArray = new Uint32Array(splatCount);\r\n        const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\r\n        splatIndexes.setUsage(THREE.DynamicDrawUsage);\r\n        geometry.setAttribute('splatIndex', splatIndexes);\r\n\r\n        geometry.instanceCount = splatCount;\r\n\r\n        return geometry;\r\n    }\r\n\r\n    buildSplatTree() {\r\n\r\n        this.splatTree = new SplatTree(10, 500);\r\n        console.time('SplatTree build');\r\n        const splatColor = new THREE.Vector4();\r\n        this.splatTree.processSplatBuffer(this.splatBuffer, (splatIndex) => {\r\n            this.splatBuffer.getColor(splatIndex, splatColor);\r\n            return splatColor.w > this.splatAlphaRemovalThreshold;\r\n        });\r\n        console.timeEnd('SplatTree build');\r\n\r\n        let leavesWithVertices = 0;\r\n        let avgSplatCount = 0;\r\n        let maxSplatCount = 0;\r\n        let nodeCount = 0;\r\n\r\n        this.splatTree.visitLeaves((node) => {\r\n            const nodeSplatCount = node.data.indexes.length;\r\n            if (nodeSplatCount > 0) {\r\n                avgSplatCount += nodeSplatCount;\r\n                maxSplatCount = Math.max(maxSplatCount, nodeSplatCount);\r\n                nodeCount++;\r\n                leavesWithVertices++;\r\n            }\r\n        });\r\n        console.log(`SplatTree leaves: ${this.splatTree.countLeaves()}`);\r\n        console.log(`SplatTree leaves with splats:${leavesWithVertices}`);\r\n        avgSplatCount = avgSplatCount / nodeCount;\r\n        console.log(`Avg splat count per node: ${avgSplatCount}`);\r\n    }\r\n\r\n    getSplatTree() {\r\n        return this.splatTree;\r\n    }\r\n\r\n    resetLocalSplatDataAndTexturesFromSplatBuffer() {\r\n        this.updateLocalSplatDataFromSplatBuffer();\r\n        this.allocateAndStoreLocalSplatDataInTextures();\r\n    }\r\n\r\n    updateLocalSplatDataFromSplatBuffer() {\r\n        const splatCount = this.splatBuffer.getSplatCount();\r\n        this.covariances = new Float32Array(splatCount * 6);\r\n        this.colors = new Uint8Array(splatCount * 4);\r\n        this.centers = new Float32Array(splatCount * 3);\r\n        this.splatBuffer.fillCovarianceArray(this.covariances);\r\n        this.splatBuffer.fillPositionArray(this.centers);\r\n        this.splatBuffer.fillColorArray(this.colors);\r\n    }\r\n\r\n    allocateAndStoreLocalSplatDataInTextures() {\r\n        const COVARIANCES_ELEMENTS_PER_TEXEL = 2;\r\n        const CENTER_COLORS_ELEMENTS_PER_TEXEL = 4;\r\n        const splatCount = this.splatBuffer.getSplatCount();\r\n\r\n        const covariancesTextureSize = new THREE.Vector2(4096, 1024);\r\n        while (covariancesTextureSize.x * covariancesTextureSize.y * COVARIANCES_ELEMENTS_PER_TEXEL < splatCount * 6) {\r\n            covariancesTextureSize.y *= 2;\r\n        }\r\n\r\n        const centersColorsTextureSize = new THREE.Vector2(4096, 1024);\r\n        while (centersColorsTextureSize.x * centersColorsTextureSize.y * CENTER_COLORS_ELEMENTS_PER_TEXEL < splatCount * 4) {\r\n            centersColorsTextureSize.y *= 2;\r\n        }\r\n\r\n        let covariancesTexture;\r\n        let paddedCovariances;\r\n        if (this.halfPrecisionCovariancesOnGPU) {\r\n            paddedCovariances = new Uint16Array(covariancesTextureSize.x * covariancesTextureSize.y * COVARIANCES_ELEMENTS_PER_TEXEL);\r\n            for (let i = 0; i < this.covariances.length; i++) {\r\n                paddedCovariances[i] = THREE.DataUtils.toHalfFloat(this.covariances[i]);\r\n            }\r\n            covariancesTexture = new THREE.DataTexture(paddedCovariances, covariancesTextureSize.x,\r\n                                                       covariancesTextureSize.y, THREE.RGFormat, THREE.HalfFloatType);\r\n        } else {\r\n            paddedCovariances = new Float32Array(covariancesTextureSize.x * covariancesTextureSize.y * COVARIANCES_ELEMENTS_PER_TEXEL);\r\n            paddedCovariances.set(this.covariances);\r\n            covariancesTexture = new THREE.DataTexture(paddedCovariances, covariancesTextureSize.x,\r\n                                                       covariancesTextureSize.y, THREE.RGFormat, THREE.FloatType);\r\n        }\r\n        covariancesTexture.needsUpdate = true;\r\n        this.material.uniforms.covariancesTexture.value = covariancesTexture;\r\n        this.material.uniforms.covariancesTextureSize.value.copy(covariancesTextureSize);\r\n\r\n        const paddedCenterColors = new Uint32Array(centersColorsTextureSize.x *\r\n                                                   centersColorsTextureSize.y * CENTER_COLORS_ELEMENTS_PER_TEXEL);\r\n        for (let c = 0; c < splatCount; c++) {\r\n            const colorsBase = c * 4;\r\n            const centersBase = c * 3;\r\n            const centerColorsBase = c * 4;\r\n            paddedCenterColors[centerColorsBase] = rgbaToInteger(this.colors[colorsBase], this.colors[colorsBase + 1],\r\n                                                                 this.colors[colorsBase + 2], this.colors[colorsBase + 3]);\r\n            paddedCenterColors[centerColorsBase + 1] = uintEncodedFloat(this.centers[centersBase]);\r\n            paddedCenterColors[centerColorsBase + 2] = uintEncodedFloat(this.centers[centersBase + 1]);\r\n            paddedCenterColors[centerColorsBase + 3] = uintEncodedFloat(this.centers[centersBase + 2]);\r\n        }\r\n        const centersColorsTexture = new THREE.DataTexture(paddedCenterColors, centersColorsTextureSize.x,\r\n                                                           centersColorsTextureSize.y, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\r\n        centersColorsTexture.internalFormat = 'RGBA32UI';\r\n        centersColorsTexture.needsUpdate = true;\r\n        this.material.uniforms.centersColorsTexture.value = centersColorsTexture;\r\n        this.material.uniforms.centersColorsTextureSize.value.copy(centersColorsTextureSize);\r\n        this.material.uniformsNeedUpdate = true;\r\n\r\n        this.splatDataTextures = {\r\n            'covariances': {\r\n                'data': paddedCovariances,\r\n                'texture': covariancesTexture,\r\n                'size': covariancesTextureSize\r\n            },\r\n            'centerColors': {\r\n                'data': paddedCenterColors,\r\n                'texture': centersColorsTexture,\r\n                'size': centersColorsTextureSize\r\n            }\r\n        };\r\n    }\r\n\r\n    updateSplatDataToDataTextures() {\r\n        this.updateLocalCovarianceDataToDataTexture();\r\n        this.updateLocalCenterColorDataToDataTexture();\r\n    }\r\n\r\n    updateLocalCovarianceDataToDataTexture() {\r\n        this.splatDataTextures.covariances.data.set(this.covariances);\r\n        this.splatDataTextures.covariances.texture.needsUpdate = true;\r\n    }\r\n\r\n    updateLocalCenterColorDataToDataTexture() {\r\n        this.splatDataTextures.centerColors.data.set(this.centerColors);\r\n        this.splatDataTextures.centerColors.texture.needsUpdate = true;\r\n    }\r\n\r\n    updateIndexes(indexes, renderSplatCount) {\r\n        const geometry = this.geometry;\r\n\r\n        geometry.attributes.splatIndex.set(indexes);\r\n        geometry.attributes.splatIndex.needsUpdate = true;\r\n\r\n        geometry.instanceCount = renderSplatCount;\r\n    }\r\n\r\n    updateUniforms = function() {\r\n\r\n        const viewport = new THREE.Vector2();\r\n\r\n        return function(renderDimensions, cameraFocalLengthX, cameraFocalLengthY) {\r\n            const splatCount = this.splatBuffer.getSplatCount();\r\n            if (splatCount > 0) {\r\n                viewport.set(renderDimensions.x * this.devicePixelRatio,\r\n                             renderDimensions.y * this.devicePixelRatio);\r\n                this.material.uniforms.viewport.value.copy(viewport);\r\n                this.material.uniforms.basisViewport.value.set(2.0 / viewport.x, 2.0 / viewport.y);\r\n                this.material.uniforms.focal.value.set(cameraFocalLengthX, cameraFocalLengthY);\r\n                this.material.uniformsNeedUpdate = true;\r\n            }\r\n        };\r\n\r\n    }();\r\n\r\n    getSplatDataTextures() {\r\n        return this.splatDataTextures;\r\n    }\r\n\r\n    getSplatCount() {\r\n        return this.splatBuffer.getSplatCount();\r\n    }\r\n\r\n    getCenters() {\r\n        return this.centers;\r\n    }\r\n\r\n    getColors() {\r\n        return this.colors;\r\n    }\r\n\r\n    getCovariances() {\r\n        return this.covariances;\r\n    }\r\n}\r\n","\u0000asm\u0001\u0000\u0000\u0000\u0000\f\u0006dylink\u0000\u0000\u0000\u0000\u0000\u0001\u0017\u0003`\u0000\u0000`\f}}}\u0000`\u0000\u0001\u0002\u0012\u0001\u0003env\u0006memory\u0002\u0003\u0000��\u0004\u0003\u0004\u0003\u0000\u0001\u0002\u00079\u0003\u0011__wasm_call_ctors\u0000\u0000\u000bsortIndexes\u0000\u0001\u0013emscripten_tls_init\u0000\u0002\n�\u0004\u0003\u0003\u0000\u0001\u000b�\u0004\u0001\u0005\u0002@ \n \tk\"\u000e \nI\"\u0010\u0004@A����\u0007!\fA����x!\u000f \u000e!\r\u0003@ \u0002 \rA\u0002t\"\tj \u0001 \u0000 \tj(\u0002\u0000A\flj\"\t(\u0002\u0004 \u0003(\u0002\u0018l \t(\u0002\u0000 \u0003(\u0002\blj \t(\u0002\b \u0003(\u0002(lj\"\t6\u0002\u0000 \t \f \t \fH\u001b!\f \t \u000f \t \u000fJ\u001b!\u000f \rA\u0001j\"\r \nG\r\u0000\u000b \u0002 \u000bA\u0002tj!\r \b� \u000f� \f���!\u0005 \u0010E\r\u0001 \u000e!\t\u0003@ \r\u0002 \u0005 \u0002 \tA\u0002tj(\u0002\u0000 \fk��\"\u0006�C\u0000\u0000\u0000O]\u0004@ \u0006�\f\u0001\u000bA����x\u000bA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \tA\u0001j\"\t \nG\r\u0000\u000b\f\u0001\u000b \u0002 \u000bA\u0002tj!\r \b�C\u0000\u0000���!\u0005A����\u0007!\f\u000b \bA\u0002O\u0004@ \r(\u0002\u0000!\u0003A\u0001!\t\u0003@ \u0002 \t \u000bjA\u0002tj\"\u0001 \u0001(\u0002\u0000 \u0003j\"\u00036\u0002\u0000 \tA\u0001j\"\t \bG\r\u0000\u000b\u000b \u000eA\u0000J\u0004@ \u000e!\t\u0003@ \u0004 \tA\u0001k\"\u0001A\u0002t\"\u0003j \u0000 \u0003j(\u0002\u00006\u0002\u0000 \tA\u0001J!\u0003 \u0001!\t \u0003\r\u0000\u000b\u000b \u000e \nA\u0001k\"\u0001L\u0004@ \u0001!\t\u0003@ \u0004 \u0001 \u0002\u0002 \u0005 \u0002 \tA\u0002t\"\u0003j(\u0002\u0000 \fk��\"\u0006�C\u0000\u0000\u0000O]\u0004@ \u0006�\f\u0001\u000bA����x\u000b \u000bjA\u0002tj\"\b(\u0002\u0000A\u0001k\"\nkA\u0002tj \u0000 \u0003j(\u0002\u00006\u0002\u0000 \b \n6\u0002\u0000 \t \u000eJ!\u0003 \tA\u0001k!\t \u0003\r\u0000\u000b\u000b\u000b\u0004\u0000A\u0000\u000b","export class Constants {\r\n\r\n    static DepthMapRange = 1 << 16;\r\n    static MemoryPageSize = 65536;\r\n    static BytesPerFloat = 4;\r\n    static BytesPerInt = 4;\r\n\r\n}\r\n","import SorterWasm from './sorter.wasm';\r\nimport { Constants } from '../Constants.js';\r\n\r\nfunction sortWorker(self) {\r\n\r\n    let wasmInstance;\r\n    let splatCount;\r\n    let indexesOffset;\r\n    let positionsOffset;\r\n    let viewProjOffset;\r\n    let indexesOutOffset;\r\n    let sortBuffersOffset;\r\n    let wasmMemory;\r\n    let positions;\r\n    let countsZero;\r\n\r\n    let Constants;\r\n\r\n    function sort(splatSortCount, splatRenderCount, viewProj, cameraPosition) {\r\n\r\n        // console.time('WASM SORT');\r\n        const sortStartTime = performance.now();\r\n        if (!countsZero) countsZero = new Uint32Array(Constants.DepthMapRange);\r\n        const viewProjArray = new Int32Array(wasmMemory, viewProjOffset, 16);\r\n        for (let i = 0; i < 16; i++) {\r\n            viewProjArray[i] = Math.round(viewProj[i] * 1000.0);\r\n        }\r\n        const frequencies = new Uint32Array(wasmMemory, sortBuffersOffset + splatCount * 4, Constants.DepthMapRange);\r\n        frequencies.set(countsZero);\r\n        wasmInstance.exports.sortIndexes(indexesOffset, positionsOffset, sortBuffersOffset, viewProjOffset,\r\n                                         indexesOutOffset, cameraPosition[0], cameraPosition[1],\r\n                                         cameraPosition[2], Constants.DepthMapRange, splatSortCount, splatRenderCount, splatCount);\r\n        const sortEndTime = performance.now();\r\n        // console.timeEnd('WASM SORT');\r\n\r\n        self.postMessage({\r\n            'sortDone': true,\r\n            'splatSortCount': splatSortCount,\r\n            'splatRenderCount': splatRenderCount,\r\n            'sortTime': sortEndTime - sortStartTime\r\n        });\r\n    }\r\n\r\n    self.onmessage = (e) => {\r\n        if (e.data.positions) {\r\n            positions = e.data.positions;\r\n            const floatPositions = new Float32Array(positions);\r\n            const intPositions = new Int32Array(splatCount * 3);\r\n            for (let i = 0; i < splatCount * 3; i++) {\r\n                intPositions[i] = Math.round(floatPositions[i] * 1000.0);\r\n            }\r\n            new Int32Array(wasmMemory, positionsOffset, splatCount * 3).set(intPositions);\r\n            self.postMessage({\r\n                'sortSetupComplete': true,\r\n            });\r\n        } else if (e.data.sort) {\r\n            const renderCount = e.data.sort.splatRenderCount || 0;\r\n            const sortCount = e.data.sort.splatSortCount || 0;\r\n            sort(sortCount, renderCount, e.data.sort.view, e.data.sort.cameraPosition, e.data.sort.inIndexBuffer);\r\n        } else if (e.data.init) {\r\n            // Yep, this is super hacky and gross :(\r\n            Constants = e.data.init.Constants;\r\n\r\n            splatCount = e.data.init.splatCount;\r\n\r\n            const INDEXES_BYTES_PER_ENTRY = Constants.BytesPerInt;\r\n            const POSITIONS_BYTES_PER_ENTRY = Constants.BytesPerFloat * 3;\r\n\r\n            const sorterWasmBytes = new Uint8Array(e.data.init.sorterWasmBytes);\r\n            const memoryBytesPerVertex = INDEXES_BYTES_PER_ENTRY + POSITIONS_BYTES_PER_ENTRY;\r\n            const memoryRequiredForVertices = splatCount * memoryBytesPerVertex;\r\n            const memoryRequiredForSortBuffers = splatCount * Constants.BytesPerInt * 2 +\r\n                                                 Constants.DepthMapRange * Constants.BytesPerInt * 2;\r\n            const extraMemory = Constants.MemoryPageSize * 32;\r\n            const totalRequiredMemory = memoryRequiredForVertices + memoryRequiredForSortBuffers + extraMemory;\r\n            const totalPagesRequired = Math.floor(totalRequiredMemory / Constants.MemoryPageSize ) + 1;\r\n            const sorterWasmImport = {\r\n                module: {},\r\n                env: {\r\n                    memory: new WebAssembly.Memory({\r\n                        initial: totalPagesRequired * 2,\r\n                        maximum: totalPagesRequired * 3,\r\n                        shared: true,\r\n                    }),\r\n                }\r\n            };\r\n            WebAssembly.compile(sorterWasmBytes)\r\n            .then((wasmModule) => {\r\n                return WebAssembly.instantiate(wasmModule, sorterWasmImport);\r\n            })\r\n            .then((instance) => {\r\n                wasmInstance = instance;\r\n                indexesOffset = 0;\r\n                positionsOffset = splatCount * INDEXES_BYTES_PER_ENTRY;\r\n                viewProjOffset = positionsOffset + splatCount * POSITIONS_BYTES_PER_ENTRY;\r\n                sortBuffersOffset = viewProjOffset + 16 * Constants.BytesPerFloat;\r\n                indexesOutOffset = sortBuffersOffset + splatCount * Constants.BytesPerInt +\r\n                                   Constants.DepthMapRange * Constants.BytesPerInt * 2;\r\n                wasmMemory = sorterWasmImport.env.memory.buffer;\r\n                self.postMessage({\r\n                    'sortSetupPhase1Complete': true,\r\n                    'inIndexBuffer': wasmMemory,\r\n                    'inIndexOffset': 0,\r\n                    'outIndexBuffer': wasmMemory,\r\n                    'outIndexOffset': indexesOutOffset\r\n                });\r\n            });\r\n        }\r\n    };\r\n}\r\n\r\nexport function createSortWorker(splatCount) {\r\n    const worker = new Worker(\r\n        URL.createObjectURL(\r\n            new Blob(['(', sortWorker.toString(), ')(self)'], {\r\n                type: 'application/javascript',\r\n            }),\r\n        ),\r\n    );\r\n\r\n    const sorterWasmBinaryString = atob(SorterWasm);\r\n    const sorterWasmBytes = new Uint8Array(sorterWasmBinaryString.length);\r\n    for (let i = 0; i < sorterWasmBinaryString.length; i++) {\r\n        sorterWasmBytes[i] = sorterWasmBinaryString.charCodeAt(i);\r\n    }\r\n\r\n    worker.postMessage({\r\n        'init': {\r\n            'sorterWasmBytes': sorterWasmBytes.buffer,\r\n            'splatCount': splatCount,\r\n            // Super hacky\r\n            'Constants': {\r\n                'BytesPerFloat': Constants.BytesPerFloat,\r\n                'BytesPerInt': Constants.BytesPerInt,\r\n                'DepthMapRange': Constants.DepthMapRange,\r\n                'MemoryPageSize': Constants.MemoryPageSize\r\n            }\r\n        }\r\n    });\r\n    return worker;\r\n}\r\n","import * as THREE from 'three';\nimport { OrbitControls } from './OrbitControls.js';\nimport { PlyLoader } from './PlyLoader.js';\nimport { SplatLoader } from './SplatLoader.js';\nimport { LoadingSpinner } from './LoadingSpinner.js';\nimport { SceneHelper } from './SceneHelper.js';\nimport { Raycaster } from './raycaster/Raycaster.js';\nimport { SplatMesh } from './SplatMesh.js';\nimport { createSortWorker } from './worker/SortWorker.js';\nimport { Constants } from './Constants.js';\nimport { getCurrentTime } from './Util.js';\n\nconst THREE_CAMERA_FOV = 50;\nconst MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT = .75;\n\nexport class Viewer {\n\n    // 用于stop取消中使用\n    requestAnimationFrameID = undefined;\n    constructor(params = {}) {\n\n        if (!params.cameraUp) params.cameraUp = [0, 1, 0];\n        if (!params.initialCameraPosition) params.initialCameraPosition = [0, 10, 15];\n        if (!params.initialCameraLookAt) params.initialCameraLookAt = [0, 0, 0];\n        if (params.selfDrivenMode === undefined) params.selfDrivenMode = true;\n        if (params.useBuiltInControls === undefined) params.useBuiltInControls = true;\n\n        this.rootElement = params.rootElement;\n        this.usingExternalCamera = params.camera ? true : false;\n        this.usingExternalRenderer = params.renderer ? true : false;\n\n        this.cameraUp = new THREE.Vector3().fromArray(params.cameraUp);\n        this.initialCameraPosition = new THREE.Vector3().fromArray(params.initialCameraPosition);\n        this.initialCameraLookAt = new THREE.Vector3().fromArray(params.initialCameraLookAt);\n\n        this.scene = params.scene;\n        this.renderer = params.renderer;\n        this.camera = params.camera;\n        this.useBuiltInControls = params.useBuiltInControls;\n        this.controls = null;\n\n        this.ignoreDevicePixelRatio = params.ignoreDevicePixelRatio || false;\n        this.devicePixelRatio = this.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio;\n\n        this.selfDrivenMode = params.selfDrivenMode;\n        this.selfDrivenUpdateFunc = this.selfDrivenUpdate.bind(this);\n\n        this.showMeshCursor = false;\n        this.showControlPlane = false;\n        this.showInfo = false;\n\n        this.sceneHelper = null;\n\n        this.sortWorker = null;\n        this.splatRenderCount = 0;\n        this.splatSortCount = 0;\n\n        this.inIndexArray = null;\n\n        this.splatMesh = null;\n\n        this.sortRunning = false;\n        this.selfDrivenModeRunning = false;\n        this.splatRenderingInitialized = false;\n\n        this.raycaster = new Raycaster();\n\n        this.infoPanel = null;\n        this.infoPanelCells = {};\n\n        this.currentFPS = 0;\n        this.lastSortTime = 0;\n\n        this.previousCameraTarget = new THREE.Vector3();\n        this.nextCameraTarget = new THREE.Vector3();\n\n        this.mousePosition = new THREE.Vector2();\n        this.mouseDownPosition = new THREE.Vector2();\n        this.mouseDownTime = null;\n\n        this.initialized = false;\n        this.init();\n\n        this.onKeyDown = (() => {\n\n            const forward = new THREE.Vector3();\n            const tempMatrixLeft = new THREE.Matrix4();\n            const tempMatrixRight = new THREE.Matrix4();\n\n            return function onKeyDown(e) {\n                forward.set(0, 0, -1);\n                forward.transformDirection(this.camera.matrixWorld);\n                tempMatrixLeft.makeRotationAxis(forward, Math.PI / 128);\n                tempMatrixRight.makeRotationAxis(forward, -Math.PI / 128);\n                switch (e.code) {\n                    case 'ArrowLeft':\n                        this.camera.up.transformDirection(tempMatrixLeft);\n                    break;\n                    case 'ArrowRight':\n                        this.camera.up.transformDirection(tempMatrixRight);\n                    break;\n                    case 'KeyC':\n                        this.showMeshCursor = !this.showMeshCursor;\n                    break;\n                    case 'KeyP':\n                        this.showControlPlane = !this.showControlPlane;\n                    break;\n                    case 'KeyI':\n                        this.showInfo = !this.showInfo;\n                        if (this.showInfo) {\n                            this.infoPanel.style.display = 'block';\n                        } else {\n                            this.infoPanel.style.display = 'none';\n                        }\n                    break;\n                }\n            };\n\n        })();\n        this.onMouseUp = (() => {\n\n            const renderDimensions = new THREE.Vector2();\n            const clickOffset = new THREE.Vector2();\n            const toNewFocalPoint = new THREE.Vector3();\n            const outHits = [];\n\n            return function onMouseUp(mouse) {\n                clickOffset.copy(this.mousePosition).sub(this.mouseDownPosition);\n                const mouseUpTime = getCurrentTime();\n                const wasClick = mouseUpTime - this.mouseDownTime < 0.5 && clickOffset.length() < 2;\n                if (!this.transitioningCameraTarget && wasClick) {\n                    this.getRenderDimensions(renderDimensions);\n                    outHits.length = 0;\n                    this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n                    this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n                    this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n                    if (outHits.length > 0) {\n                        const intersectionPoint = outHits[0].origin;\n                        toNewFocalPoint.copy(intersectionPoint).sub(this.camera.position);\n                        if (toNewFocalPoint.length() > MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT) {\n                            this.previousCameraTarget.copy(this.controls.target);\n                            this.nextCameraTarget.copy(intersectionPoint);\n                            this.transitioningCameraTarget = true;\n                            this.transitioningCameraTargetStartTime = getCurrentTime();\n                        }\n                    }\n                }\n            };\n\n        })();\n        this.updateSplatMeshUniforms = (() => {\n\n            const renderDimensions = new THREE.Vector2();\n\n            return function updateSplatMeshUniforms() {\n                const splatCount = this.splatMesh.getSplatCount();\n                if (splatCount > 0) {\n                    this.getRenderDimensions(renderDimensions);\n                    this.cameraFocalLengthX = this.camera.projectionMatrix.elements[0] *\n                                              this.devicePixelRatio * renderDimensions.x * 0.45;\n                                              this.cameraFocalLengthY = this.camera.projectionMatrix.elements[5] *\n                                              this.devicePixelRatio * renderDimensions.y * 0.45;\n                    this.splatMesh.updateUniforms(renderDimensions, this.cameraFocalLengthX, this.cameraFocalLengthY);\n                }\n            };\n\n        })();\n        this.gatherSceneNodes = (() => {\n\n            const nodeRenderList = [];\n            const tempVectorYZ = new THREE.Vector3();\n            const tempVectorXZ = new THREE.Vector3();\n            const tempVector = new THREE.Vector3();\n            const tempMatrix4 = new THREE.Matrix4();\n            const renderDimensions = new THREE.Vector3();\n            const forward = new THREE.Vector3(0, 0, -1);\n\n            const tempMax = new THREE.Vector3();\n            const nodeSize = (node) => {\n                return tempMax.copy(node.max).sub(node.min).length();\n            };\n\n            const MaximumDistanceToSort = 125;\n            const MaximumDistanceToRender = 125;\n\n            return function gatherSceneNodes(gatherAllNodes) {\n\n                this.getRenderDimensions(renderDimensions);\n                const cameraFocalLength = (renderDimensions.y / 2.0) / Math.tan(this.camera.fov / 2.0 * THREE.MathUtils.DEG2RAD);\n                const fovXOver2 = Math.atan(renderDimensions.x / 2.0 / cameraFocalLength);\n                const fovYOver2 = Math.atan(renderDimensions.y / 2.0 / cameraFocalLength);\n                const cosFovXOver2 = Math.cos(fovXOver2);\n                const cosFovYOver2 = Math.cos(fovYOver2);\n                tempMatrix4.copy(this.camera.matrixWorld).invert();\n                tempMatrix4.multiply(this.splatMesh.matrixWorld);\n\n                const splatTree = this.splatMesh.getSplatTree();\n                let nodeRenderCount = 0;\n                let splatRenderCount = 0;\n                const nodeCount = splatTree.nodesWithIndexes.length;\n                for (let i = 0; i < nodeCount; i++) {\n                    const node = splatTree.nodesWithIndexes[i];\n                    tempVector.copy(node.center).applyMatrix4(tempMatrix4);\n                    const distanceToNode = tempVector.length();\n                    tempVector.normalize();\n\n                    tempVectorYZ.copy(tempVector).setX(0).normalize();\n                    tempVectorXZ.copy(tempVector).setY(0).normalize();\n\n                    const cameraAngleXZDot = forward.dot(tempVectorXZ);\n                    const cameraAngleYZDot = forward.dot(tempVectorYZ);\n\n                    const ns = nodeSize(node);\n                    const outOfFovY = cameraAngleYZDot < (cosFovYOver2 - .5);\n                    const outOfFovX = cameraAngleXZDot < (cosFovXOver2 - .5);\n                    if (!gatherAllNodes && ((outOfFovX || outOfFovY || distanceToNode > MaximumDistanceToRender) && distanceToNode > ns)) {\n                        continue;\n                    }\n                    splatRenderCount += node.data.indexes.length;\n                    nodeRenderList[nodeRenderCount] = node;\n                    node.data.distanceToNode = distanceToNode;\n                    nodeRenderCount++;\n                }\n\n                nodeRenderList.length = nodeRenderCount;\n                nodeRenderList.sort((a, b) => {\n                    if (a.data.distanceToNode < b.data.distanceToNode) return 1;\n                    else return -1;\n                });\n\n                this.splatRenderCount = splatRenderCount;\n                this.splatSortCount = 0;\n                let currentByteOffset = splatRenderCount * Constants.BytesPerInt;\n                for (let i = 0; i < nodeRenderCount; i++) {\n                    const node = nodeRenderList[i];\n                    const shouldSort = node.data.distanceToNode <= MaximumDistanceToSort;\n                    if (shouldSort) {\n                        this.splatSortCount += node.data.indexes.length;\n                    }\n                    const windowSizeInts = node.data.indexes.length;\n                    const windowSizeBytes = windowSizeInts * Constants.BytesPerInt;\n                    let destView = new Uint32Array(this.inIndexArray.buffer, currentByteOffset - windowSizeBytes, windowSizeInts);\n                    destView.set(node.data.indexes);\n                    currentByteOffset -= windowSizeBytes;\n                }\n\n            };\n\n        })();\n        this.updateFPS = (() => {\n\n            let lastCalcTime = getCurrentTime();\n            let frameCount = 0;\n\n            return function updateFPS() {\n                const currentTime = getCurrentTime();\n                const calcDelta = currentTime - lastCalcTime;\n                if (calcDelta >= 1.0) {\n                    this.currentFPS = frameCount;\n                    frameCount = 0;\n                    lastCalcTime = currentTime;\n                } else {\n                    frameCount++;\n                }\n            };\n\n        })();\n        this.timingSensitiveUpdates = (() => {\n\n            let lastUpdateTime;\n\n            return function timingSensitiveUpdates() {\n                const currentTime = getCurrentTime();\n                if (!lastUpdateTime) lastUpdateTime = currentTime;\n                const timeDelta = currentTime - lastUpdateTime;\n\n                this.updateCameraTransition(currentTime);\n                this.updateFocusMarker(timeDelta);\n\n                lastUpdateTime = currentTime;\n            };\n\n        })();\n        this.updateCameraTransition = (() => {\n\n            let tempCameraTarget = new THREE.Vector3();\n            let toPreviousTarget = new THREE.Vector3();\n            let toNextTarget = new THREE.Vector3();\n\n            return function updateCameraTransition(currentTime) {\n                if (this.transitioningCameraTarget) {\n                    toPreviousTarget.copy(this.previousCameraTarget).sub(this.camera.position).normalize();\n                    toNextTarget.copy(this.nextCameraTarget).sub(this.camera.position).normalize();\n                    const rotationAngle = Math.acos(toPreviousTarget.dot(toNextTarget));\n                    const rotationSpeed = rotationAngle / (Math.PI / 3) * .65 + .3;\n                    const t = (rotationSpeed / rotationAngle * (currentTime - this.transitioningCameraTargetStartTime));\n                    tempCameraTarget.copy(this.previousCameraTarget).lerp(this.nextCameraTarget, t);\n                    this.camera.lookAt(tempCameraTarget);\n                    this.controls.target.copy(tempCameraTarget);\n                    if (t >= 1.0) {\n                        this.transitioningCameraTarget = false;\n                    }\n                }\n            };\n\n        })();\n        this.updateMeshCursor = (() => {\n\n            const outHits = [];\n            const renderDimensions = new THREE.Vector2();\n\n            return function updateMeshCursor() {\n                if (this.showMeshCursor) {\n                    this.getRenderDimensions(renderDimensions);\n                    outHits.length = 0;\n                    this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n                    this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n                    if (outHits.length > 0) {\n                        this.sceneHelper.setMeshCursorVisibility(true);\n                        this.sceneHelper.positionAndOrientMeshCursor(outHits[0].origin, this.camera);\n                    } else {\n                        this.sceneHelper.setMeshCursorVisibility(false);\n                    }\n                } else {\n                    this.sceneHelper.setMeshCursorVisibility(false);\n                }\n            };\n\n        })();\n        this.updateForRendererSizeChanges = (() => {\n\n            const lastRendererSize = new THREE.Vector2();\n            const currentRendererSize = new THREE.Vector2();\n\n            return function updateForRendererSizeChanges() {\n                this.renderer.getSize(currentRendererSize);\n                if (currentRendererSize.x !== lastRendererSize.x || currentRendererSize.y !== lastRendererSize.y) {\n                    if (!this.usingExternalCamera) {\n                        this.camera.aspect = currentRendererSize.x / currentRendererSize.y;\n                        this.camera.updateProjectionMatrix();\n                    }\n                    if (this.splatRenderingInitialized) {\n                        this.updateSplatMeshUniforms();\n                    }\n                    lastRendererSize.copy(currentRendererSize);\n                }\n            };\n\n        })();\n        this.updateInfo = (() => {\n\n            const renderDimensions = new THREE.Vector2();\n\n            return function updateInfo() {\n                if (this.showInfo) {\n                    const splatCount = this.splatMesh.getSplatCount();\n                    this.getRenderDimensions(renderDimensions);\n\n                    const cameraPos = this.camera.position;\n                    const cameraPosString = `[${cameraPos.x.toFixed(5)}, ${cameraPos.y.toFixed(5)}, ${cameraPos.z.toFixed(5)}]`;\n                    this.infoPanelCells.cameraPosition.innerHTML = cameraPosString;\n\n                    const cameraLookAt = this.controls.target;\n                    const cameraLookAtString = `[${cameraLookAt.x.toFixed(5)}, ${cameraLookAt.y.toFixed(5)}, ${cameraLookAt.z.toFixed(5)}]`;\n                    this.infoPanelCells.cameraLookAt.innerHTML = cameraLookAtString;\n\n                    const cameraUp = this.camera.up;\n                    const cameraUpString = `[${cameraUp.x.toFixed(5)}, ${cameraUp.y.toFixed(5)}, ${cameraUp.z.toFixed(5)}]`;\n                    this.infoPanelCells.cameraUp.innerHTML = cameraUpString;\n\n                    if (this.showMeshCursor) {\n                        const cursorPos = this.sceneHelper.meshCursor.position;\n                        const cursorPosString = `[${cursorPos.x.toFixed(5)}, ${cursorPos.y.toFixed(5)}, ${cursorPos.z.toFixed(5)}]`;\n                        this.infoPanelCells.cursorPosition.innerHTML = cursorPosString;\n                    } else {\n                        this.infoPanelCells.cursorPosition.innerHTML = 'N/A';\n                    }\n\n                    this.infoPanelCells.fps.innerHTML = this.currentFPS;\n                    this.infoPanelCells.renderWindow.innerHTML = `${renderDimensions.x} x ${renderDimensions.y}`;\n\n                    const renderPct = this.splatRenderCount / splatCount * 100;\n                    this.infoPanelCells.renderSplatCount.innerHTML =\n                        `${this.splatRenderCount} splats out of ${splatCount} (${renderPct.toFixed(2)}%)`;\n\n                    this.infoPanelCells.sortTime.innerHTML = `${this.lastSortTime.toFixed(3)} ms`;\n                }\n            };\n\n        })();\n        this.updateFocusMarker = (() => {\n\n            const renderDimensions = new THREE.Vector2();\n            let wasTransitioning = false;\n\n            return function updateFocusMarker(timeDelta) {\n                this.getRenderDimensions(renderDimensions);\n                const fadeInSpeed = 10.0;\n                const fadeOutSpeed = 2.5;\n                if (this.transitioningCameraTarget) {\n                    this.sceneHelper.setFocusMarkerVisibility(true);\n                    const currentFocusMarkerOpacity = Math.max(this.sceneHelper.getFocusMarkerOpacity(), 0.0);\n                    let newFocusMarkerOpacity = Math.min(currentFocusMarkerOpacity + fadeInSpeed * timeDelta, 1.0);\n                    this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n                    this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n                    wasTransitioning = true;\n                } else {\n                    let currentFocusMarkerOpacity;\n                    if (wasTransitioning) currentFocusMarkerOpacity = 1.0;\n                    else currentFocusMarkerOpacity = Math.min(this.sceneHelper.getFocusMarkerOpacity(), 1.0);\n                    if (currentFocusMarkerOpacity > 0) {\n                        this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n                        let newFocusMarkerOpacity = Math.max(currentFocusMarkerOpacity - fadeOutSpeed * timeDelta, 0.0);\n                        this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n                        if (newFocusMarkerOpacity === 0.0) this.sceneHelper.setFocusMarkerVisibility(false);\n                    }\n                    wasTransitioning = false;\n                }\n            };\n\n        })();\n        this.render = function render() {\n\n            return function() {\n                const hasRenderables = (scene) => {\n                    for (let child of scene.children) {\n                        if (child.visible) {\n                        return true;\n                        }\n                    }\n                    return false;\n                };\n\n                const savedAuoClear = this.renderer.autoClear;\n                this.renderer.autoClear = false;\n                if (hasRenderables(this.scene)) this.renderer.render(this.scene, this.camera);\n                this.renderer.render(this.splatMesh, this.camera);\n                if (this.sceneHelper.getFocusMarkerOpacity() > 0.0) this.renderer.render(this.sceneHelper.focusMarker, this.camera);\n                if (this.showControlPlane) this.renderer.render(this.sceneHelper.controlPlane, this.camera);\n                this.renderer.autoClear = savedAuoClear;\n            };\n\n        }();\n        this.updateView = function updateView() {\n\n            const tempMatrix = new THREE.Matrix4();\n            const cameraPositionArray = [];\n            const lastSortViewDir = new THREE.Vector3(0, 0, -1);\n            const sortViewDir = new THREE.Vector3(0, 0, -1);\n            const lastSortViewPos = new THREE.Vector3();\n            const sortViewOffset = new THREE.Vector3();\n\n            return function updateView(force = false, gatherAllNodes = false) {\n                if (!force) {\n                    sortViewDir.set(0, 0, -1).applyQuaternion(this.camera.quaternion);\n                    let needsRefreshForRotation = false;\n                    let needsRefreshForPosition = false;\n                    if (sortViewDir.dot(lastSortViewDir) <= 0.95) needsRefreshForRotation = true;\n                    if (sortViewOffset.copy(this.camera.position).sub(lastSortViewPos).length() >= 1.0) needsRefreshForPosition = true;\n                    if (!needsRefreshForRotation && !needsRefreshForPosition) return;\n                }\n\n                tempMatrix.copy(this.camera.matrixWorld).invert();\n                tempMatrix.premultiply(this.camera.projectionMatrix);\n                tempMatrix.multiply(this.splatMesh.matrixWorld);\n                cameraPositionArray[0] = this.camera.position.x;\n                cameraPositionArray[1] = this.camera.position.y;\n                cameraPositionArray[2] = this.camera.position.z;\n\n                if (!this.sortRunning) {\n                    this.gatherSceneNodes(gatherAllNodes);\n                    this.sortRunning = true;\n                    this.sortWorker.postMessage({\n                        sort: {\n                            'view': tempMatrix.elements,\n                            'cameraPosition': cameraPositionArray,\n                            'splatRenderCount': this.splatRenderCount,\n                            'splatSortCount': this.splatSortCount,\n                            'inIndexBuffer': this.inIndexArray.buffer\n                        }\n                    });\n                    lastSortViewPos.copy(this.camera.position);\n                    lastSortViewDir.copy(sortViewDir);\n                }\n            };\n\n        }();\n    }\n\n    init() {\n\n        if (this.initialized) return;\n\n        if (!this.rootElement && !this.usingExternalRenderer) {\n            this.rootElement = document.createElement('div');\n            this.rootElement.style.width = '100%';\n            this.rootElement.style.height = '100%';\n            document.body.appendChild(this.rootElement);\n        }\n\n        const renderDimensions = new THREE.Vector2();\n        this.getRenderDimensions(renderDimensions);\n\n        if (!this.usingExternalCamera) {\n            this.camera = new THREE.PerspectiveCamera(THREE_CAMERA_FOV, renderDimensions.x / renderDimensions.y, 0.1, 500);\n            this.camera.position.copy(this.initialCameraPosition);\n            this.camera.lookAt(this.initialCameraLookAt);\n            this.camera.up.copy(this.cameraUp).normalize();\n        }\n\n        if (!this.usingExternalRenderer) {\n            this.renderer = new THREE.WebGLRenderer({\n                antialias: false,\n                precision: 'highp'\n            });\n            this.renderer.setPixelRatio(this.devicePixelRatio);\n            this.renderer.autoClear = true;\n            this.renderer.setClearColor(0.0, 0.0, 0.0, 0.0);\n            this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n        }\n\n        this.scene = this.scene || new THREE.Scene();\n        this.sceneHelper = new SceneHelper(this.scene);\n        this.sceneHelper.setupMeshCursor();\n        this.sceneHelper.setupFocusMarker();\n        this.sceneHelper.setupControlPlane();\n\n        if (this.useBuiltInControls) {\n            this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n            this.controls.listenToKeyEvents(window);\n            this.controls.rotateSpeed = 0.5;\n            this.controls.maxPolarAngle = Math.PI * .75;\n            this.controls.minPolarAngle = 0.1;\n            this.controls.enableDamping = true;\n            this.controls.dampingFactor = 0.05;\n            this.controls.target.copy(this.initialCameraLookAt);\n            this.rootElement.addEventListener('pointermove', this.onMouseMove.bind(this), false);\n            this.rootElement.addEventListener('pointerdown', this.onMouseDown.bind(this), false);\n            this.rootElement.addEventListener('pointerup', this.onMouseUp.bind(this), false);\n            window.addEventListener('keydown', this.onKeyDown.bind(this), false);\n        }\n\n        if (!this.usingExternalRenderer) {\n            const resizeObserver = new ResizeObserver(() => {\n                this.getRenderDimensions(renderDimensions);\n                this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n            });\n            resizeObserver.observe(this.rootElement);\n            this.rootElement.appendChild(this.renderer.domElement);\n        }\n\n        this.setupInfoPanel();\n\n        this.loadingSpinner = new LoadingSpinner(null, this.rootElement);\n        this.loadingSpinner.hide();\n\n        this.initialized = true;\n    }\n\n    onKeyDown(e) {\n\n    }\n\n    onMouseMove(mouse) {\n        this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n    }\n\n    onMouseDown() {\n        this.mouseDownPosition.copy(this.mousePosition);\n        this.mouseDownTime = getCurrentTime();\n    }\n\n    onMouseUp(mouse) {\n\n    }\n\n    getRenderDimensions(outDimensions) {\n        if (this.rootElement) {\n            outDimensions.x = this.rootElement.offsetWidth;\n            outDimensions.y = this.rootElement.offsetHeight;\n        } else {\n            this.renderer.getSize(outDimensions);\n        }\n    };\n\n    setupInfoPanel() {\n        this.infoPanel = document.createElement('div');\n        this.infoPanel.style.position = 'absolute';\n        this.infoPanel.style.padding = '10px';\n        this.infoPanel.style.backgroundColor = '#cccccc';\n        this.infoPanel.style.border = '#aaaaaa 1px solid';\n        this.infoPanel.style.zIndex = 100;\n        this.infoPanel.style.width = '375px';\n        this.infoPanel.style.fontFamily = 'arial';\n        this.infoPanel.style.fontSize = '10pt';\n        this.infoPanel.style.textAlign = 'left';\n\n        const layout = [\n            ['Camera position', 'cameraPosition'],\n            ['Camera look-at', 'cameraLookAt'],\n            ['Camera up', 'cameraUp'],\n            ['Cursor position', 'cursorPosition'],\n            ['FPS', 'fps'],\n            ['Render window', 'renderWindow'],\n            ['Rendering:', 'renderSplatCount'],\n            ['Sort time', 'sortTime']\n        ];\n\n        const infoTable = document.createElement('div');\n        infoTable.style.display = 'table';\n\n        for (let layoutEntry of layout) {\n            const row = document.createElement('div');\n            row.style.display = 'table-row';\n\n            const labelCell = document.createElement('div');\n            labelCell.style.display = 'table-cell';\n            labelCell.style.width = '110px';\n            labelCell.innerHTML = `${layoutEntry[0]}: `;\n\n            const spacerCell = document.createElement('div');\n            spacerCell.style.display = 'table-cell';\n            spacerCell.style.width = '10px';\n            spacerCell.innerHTML = ' ';\n\n            const infoCell = document.createElement('div');\n            infoCell.style.display = 'table-cell';\n            infoCell.innerHTML = '';\n\n            this.infoPanelCells[layoutEntry[1]] = infoCell;\n\n            row.appendChild(labelCell);\n            row.appendChild(spacerCell);\n            row.appendChild(infoCell);\n\n            infoTable.appendChild(row);\n        }\n\n        this.infoPanel.appendChild(infoTable);\n        this.infoPanel.style.display = 'none';\n        this.renderer.domElement.parentElement.prepend(this.infoPanel);\n    }\n\n    updateSplatMeshUniforms() {\n\n    }\n\n    loadFile(fileURL, options = {}) {\n        if (options.position) options.position = new THREE.Vector3().fromArray(options.position);\n        if (options.orientation) options.orientation = new THREE.Quaternion().fromArray(options.orientation);\n        options.splatAlphaRemovalThreshold = options.splatAlphaRemovalThreshold || 1;\n        options.halfPrecisionCovariancesOnGPU = !!options.halfPrecisionCovariancesOnGPU;\n        if (options.showLoadingSpinner !== false) options.showLoadingSpinner = true;\n\n        if (options.showLoadingSpinner) this.loadingSpinner.show();\n        const downloadProgress = (percent, percentLabel) => {\n            if (options.showLoadingSpinner) {\n                if (percent == 100) {\n                    this.loadingSpinner.setMessage(`Download complete!`);\n                } else {\n                    const suffix = percentLabel ? `: ${percentLabel}` : `...`;\n                    this.loadingSpinner.setMessage(`Downloading${suffix}`);\n                }\n            }\n            if (options.onProgress) options.onProgress(percent, percentLabel, 'downloading');\n        };\n\n        return new Promise((resolve, reject) => {\n            let fileLoadPromise;\n            if (fileURL.endsWith('.splat')) {\n                fileLoadPromise = new SplatLoader().loadFromURL(fileURL, downloadProgress);\n            } else if (fileURL.endsWith('.ply')) {\n                fileLoadPromise = new PlyLoader().loadFromURL(fileURL, downloadProgress);\n            } else {\n                reject(new Error(`Viewer::loadFile -> File format not supported: ${fileURL}`));\n            }\n            fileLoadPromise\n            .then((splatBuffer) => {\n                if (options.showLoadingSpinner) this.loadingSpinner.hide();\n                if (options.onProgress) options.onProgress(0, '0%', 'processing');\n                this.loadSplatBuffer(splatBuffer, options).then(() => {\n                    if (options.onProgress) options.onProgress(100, '100%', 'processing');\n                    resolve();\n                });\n            })\n            .catch((e) => {\n                reject(new Error(`Viewer::loadFile -> Could not load file ${fileURL}`));\n            });\n        });\n    }\n\n    loadSplatBuffer(splatBuffer, options) {\n        if (options.showLoadingSpinner !== false) options.showLoadingSpinner = true;\n        return new Promise((resolve) => {\n            if (options.showLoadingSpinner) {\n                this.loadingSpinner.show();\n                this.loadingSpinner.setMessage(`Processing splats...`);\n            }\n            window.setTimeout(() => {\n                this.setupSplatMesh(splatBuffer, options.splatAlphaRemovalThreshold, options.position,\n                                    options.orientation, options.halfPrecisionCovariancesOnGPU, this.devicePixelRatio);\n                this.setupSortWorker(splatBuffer).then(() => {\n                    if (options.showLoadingSpinner) this.loadingSpinner.hide();\n                    resolve();\n                });\n            }, 1);\n        });\n    }\n\n    setupSplatMesh(splatBuffer, splatAlphaRemovalThreshold = 1, position = new THREE.Vector3(), quaternion = new THREE.Quaternion(),\n                   halfPrecisionCovariancesOnGPU = false, devicePixelRatio = 1) {\n        const splatCount = splatBuffer.getSplatCount();\n        console.log(`Splat count: ${splatCount}`);\n\n        this.splatMesh = SplatMesh.buildMesh(splatBuffer, splatAlphaRemovalThreshold, halfPrecisionCovariancesOnGPU, devicePixelRatio);\n        this.splatMesh.position.copy(position);\n        this.splatMesh.quaternion.copy(quaternion);\n        this.splatMesh.frustumCulled = false;\n        this.updateSplatMeshUniforms();\n\n        this.splatRenderCount = splatCount;\n    }\n\n    setupSortWorker(splatBuffer) {\n        return new Promise((resolve) => {\n            const splatCount = splatBuffer.getSplatCount();\n            this.sortWorker = createSortWorker(splatCount);\n            this.sortWorker.onmessage = (e) => {\n                if (e.data.sortDone) {\n                    this.sortRunning = false;\n                    this.splatMesh.updateIndexes(this.outIndexArray, e.data.splatRenderCount);\n                    this.lastSortTime = e.data.sortTime;\n                } else if (e.data.sortCanceled) {\n                    this.sortRunning = false;\n                } else if (e.data.sortSetupPhase1Complete) {\n                    console.log('Sorting web worker WASM setup complete.');\n                    this.sortWorker.postMessage({\n                        'positions': this.splatMesh.getCenters().buffer\n                    });\n                    this.outIndexArray = new Uint32Array(e.data.outIndexBuffer, e.data.outIndexOffset, splatBuffer.getSplatCount());\n                    this.inIndexArray = new Uint32Array(e.data.inIndexBuffer, e.data.inIndexOffset, splatBuffer.getSplatCount());\n                    for (let i = 0; i < splatCount; i++) this.inIndexArray[i] = i;\n                } else if (e.data.sortSetupComplete) {\n                    console.log('Sorting web worker ready.');\n                    this.splatMesh.updateIndexes(this.outIndexArray, splatBuffer.getSplatCount());\n                    const splatDataTextures = this.splatMesh.getSplatDataTextures();\n                    const covariancesTextureSize = splatDataTextures.covariances.size;\n                    const centersColorsTextureSize = splatDataTextures.centerColors.size;\n                    console.log('Covariances texture size: ' + covariancesTextureSize.x + ' x ' + covariancesTextureSize.y);\n                    console.log('Centers/colors texture size: ' + centersColorsTextureSize.x + ' x ' + centersColorsTextureSize.y);\n                    this.updateView(true, true);\n                    this.splatRenderingInitialized = true;\n                    resolve();\n                }\n            };\n        });\n    }\n\n    gatherSceneNodes(gatherAllNodes) {\n\n    }\n\n    start() {\n        if (this.selfDrivenMode) {\n            this.requestAnimationFrameID = requestAnimationFrame(this.selfDrivenUpdateFunc);\n            this.selfDrivenModeRunning = true;\n        } else {\n            throw new Error('Cannot start viewer unless it is in self driven mode.');\n        }\n    }\n\n    stop() {\n        if (this.selfDrivenMode && this.selfDrivenModeRunning) {\n            cancelAnimationFrame(this.requestAnimationFrameID);\n            this.selfDrivenModeRunning = false;\n        }\n    }\n\n    updateFPS() {\n\n    }\n\n    updateForRendererSizeChanges() {\n\n    }\n\n    selfDrivenUpdate() {\n        if (this.selfDrivenMode) {\n            this.requestAnimationFrameID = requestAnimationFrame(this.selfDrivenUpdateFunc);\n        }\n        this.update();\n        this.render();\n    }\n\n    update() {\n        if (this.controls) {\n            this.controls.update();\n        }\n        this.updateView();\n        this.updateForRendererSizeChanges();\n        this.updateMeshCursor();\n        this.updateFPS();\n        this.timingSensitiveUpdates();\n        this.updateInfo();\n        this.updateControlPlane();\n    }\n\n    timingSensitiveUpdates() {\n\n    }\n\n    updateCameraTransition(currentTime) {\n\n    }\n\n    updateFocusMarker(timeDelta) {\n\n    }\n\n    updateMeshCursor() {\n\n    }\n\n    updateInfo() {\n\n    }\n\n    updateControlPlane() {\n        if (this.showControlPlane) {\n            this.sceneHelper.setControlPlaneVisibility(true);\n            this.sceneHelper.positionAndOrientControlPlane(this.controls.target, this.camera.up);\n        } else {\n            this.sceneHelper.setControlPlaneVisibility(false);\n        }\n    }\n\n    render() {\n\n    }\n\n    updateView(force = false, gatherAllNodes = false) {\n\n    }\n\n    getSplatMesh() {\n        return this.splatMesh;\n    }\n}\n"],"names":["THREE","clamp","Ray","Plane","MathUtils","EventDispatcher","Vector3","MOUSE","TOUCH","Quaternion","Spherical","Vector2"],"mappings":"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"}