UNPKG

vue-cesium

Version:
1 lines 29.2 kB
{"version":3,"file":"DebugCameraPrimitive.mjs","sources":["../../../../../packages/shared/src/DebugCameraPrimitive.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2022-04-17 22:17:16\n * @LastEditTime: 2023-03-09 18:00:52\n * @LastEditors: zouyaoji 370681295@qq.com\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\shared\\src\\DebugCameraPrimitive.ts\n */\n\nconst attributeLocations = {\n position: 0,\n normal: 1\n}\n\nclass DebugCameraPrimitive {\n modelMatrix: Cesium.Matrix4\n fovH: number\n fovV: number\n segmentH: number\n segmentV: number\n subSegmentH: number\n subSegmentV: number\n _faceColor: Cesium.Color\n _lineColor: Cesium.Color\n show: boolean\n _modelMatrix: Cesium.Matrix4\n _fovH: number\n _fovV: number\n _segmentH: number\n _segmentV: number\n _subSegmentH: number\n _subSegmentV: number\n _boundingSphere: Cesium.BoundingSphere\n _initBoundingSphere: any\n _command: any\n _lineCommand: any\n _shaderprogram: any\n constructor(options) {\n const { defaultValue, Matrix4, Math: CesiumMath, Color, BoundingSphere } = Cesium\n this.modelMatrix = defaultValue(options.modelMatrix, new Matrix4())\n this.fovH = defaultValue(options.fovH, CesiumMath.toRadians(60))\n this.fovV = defaultValue(options.fovV, CesiumMath.toRadians(30))\n this.segmentH = defaultValue(options.segmentH, 16)\n this.segmentV = defaultValue(options.segmentV, 8)\n this.subSegmentH = defaultValue(options.subSegmentH, 3)\n this.subSegmentV = defaultValue(options.subSegmentV, 3)\n this._faceColor = defaultValue(options.faceColor, new Color(1, 1, 1, 0.1))\n this._lineColor = defaultValue(options.lineColor, new Color(1, 1, 1, 0.4))\n this.show = defaultValue(options.show, true)\n this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY)\n this._fovH = 0\n this._fovV = 0\n this._segmentH = 1\n this._segmentV = 1\n this._subSegmentH = 1\n this._subSegmentV = 1\n this._boundingSphere = new BoundingSphere()\n this._initBoundingSphere = undefined\n this._command = undefined\n }\n\n get faceColor() {\n return this._faceColor\n }\n set faceColor(e) {\n this._faceColor = e\n }\n\n get lineColor() {\n return this._lineColor\n }\n set lineColor(e) {\n this._lineColor = e\n }\n\n update(frameState) {\n if (this.show && frameState.passes.render) {\n const { clone, Matrix4, defined, BoundingSphere } = Cesium\n\n ;(this.fovH === this._fovH &&\n this.fovV === this._fovV &&\n this.segmentH === this._segmentH &&\n this.segmentV === this._segmentV &&\n this.subSegmentH === this._subSegmentH &&\n this.subSegmentV === this._subSegmentV) ||\n ((this._fovH = this.fovH),\n (this._fovV = this.fovV),\n (this._segmentH = this.segmentH),\n (this._segmentV = this.segmentV),\n (this._subSegmentH = this.subSegmentH),\n (this._subSegmentV = this.subSegmentV),\n (this._modelMatrix = clone(Matrix4.IDENTITY)),\n this._destroyVideoMemory())\n\n if (\n this.fovH !== this._fovH &&\n this.fovV !== this._fovV &&\n this.segmentH !== this._segmentH &&\n this.segmentV !== this._segmentV &&\n this.subSegmentH !== this._subSegmentH &&\n this.subSegmentV !== this._subSegmentV\n ) {\n this._fovH = this.fovH\n this._fovV = this.fovV\n this._segmentH = this.segmentH\n this._segmentV = this.segmentV\n this._subSegmentH = this.subSegmentH\n this._subSegmentV = this.subSegmentV\n this._modelMatrix = clone(Matrix4.IDENTITY)\n this._destroyVideoMemory()\n }\n\n if (!defined(this._command)) {\n this._createCommand(frameState.context)\n }\n if (!Matrix4.equals(this.modelMatrix, this._modelMatrix)) {\n Matrix4.clone(this.modelMatrix, this._modelMatrix)\n this._command.modelMatrix = Matrix4.IDENTITY\n this._command.modelMatrix = this._modelMatrix\n this._command.boundingVolume = BoundingSphere.transform(this._initBoundingSphere, this._modelMatrix, this._boundingSphere)\n this._lineCommand.modelMatrix = Matrix4.IDENTITY\n this._lineCommand.modelMatrix = this._modelMatrix\n this._lineCommand.boundingVolume = BoundingSphere.transform(this._initBoundingSphere, this._modelMatrix, this._boundingSphere)\n }\n\n this._command && frameState.commandList.push(this._command)\n this._lineCommand && frameState.commandList.push(this._lineCommand)\n }\n }\n\n isDestroyed() {\n return false\n }\n\n destroy() {\n this._destroyVideoMemory()\n Cesium.destroyObject(this)\n }\n\n _createCommand(context) {\n const {\n Appearance,\n RenderState,\n ShaderSource,\n ShaderProgram,\n BufferUsage,\n IndexDatatype,\n VertexArray,\n ComponentDatatype,\n BoundingSphere,\n DrawCommand,\n PrimitiveType,\n Pass,\n Matrix4\n } = Cesium\n const that = this\n const segmentHLength = this._subSegmentH * this._segmentH\n const segmentVLength = this._subSegmentV * this._segmentV\n const positionTypedArray1 = createTypedArray(this._fovH, this._fovV, segmentHLength, segmentVLength)\n const positionTypedArray2 = createTypedArray(this._fovH, this._fovV, segmentHLength, segmentVLength)\n const indexTypedArray1 = generateIndices1(segmentHLength, segmentVLength)\n const indexTypedArray2 = generateIndices2(this._segmentH, this._segmentV, this._subSegmentH, this._subSegmentV)\n const appearance = Appearance['getDefaultRenderState'](true, false, undefined)\n const renderState = RenderState.fromCache(appearance)\n const webgl2 = context.webgl2\n const vs = new ShaderSource({\n sources: [\n `\n // 使用double类型的position进行计算\n // attribute vec3 position3DHigh;\n // attribute vec3 position3DLow;\n ${webgl2 ? 'in' : 'attribute'} vec3 position;\n ${webgl2 ? 'in' : 'attribute'} vec3 normal;\n // attribute vec2 st;\n // attribute float batchId;\n ${webgl2 ? 'out' : 'varying'} vec3 v_positionEC;\n ${webgl2 ? 'out' : 'varying'} vec3 v_normalEC;\n // varying vec2 v_st;\n void main()\n {\n // 使用double类型的position进行计算\n // vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);\n // v_positionEC = (czm_modelViewRelativeToEye * p).xyz;\n // position in eye coordinates\n // v_normalEC = czm_normal * normal;\n // normal in eye coordinates\n // v_st = st;\n // gl_Position = czm_modelViewProjectionRelativeToEye * p;\n v_positionEC = (czm_modelView * vec4(position, 1.0)).xyz;\n // position in eye coordinates\n v_normalEC = czm_normal * normal;\n // normal in eye coordinates\n // v_st = st;\n gl_Position = czm_modelViewProjection * vec4(position, 1.0);\n }\n `\n ]\n })\n const fs = new ShaderSource({\n sources: [\n `\n ${webgl2 ? 'in' : 'varying'} vec3 v_positionEC;\n ${webgl2 ? 'in' : 'varying'} vec3 v_normalEC;\n // varying vec2 v_st;\n // uniform sampler2D myImage;\n uniform vec4 vcColor;\n void main()\n {\n vec3 positionToEyeEC = -v_positionEC;\n vec3 normalEC = normalize(v_normalEC);\n #ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n #endif\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n // materialInput.st = v_st;\n //czm_material material = czm_getMaterial(materialInput);\n czm_material material = czm_getDefaultMaterial(materialInput);\n // material.diffuse = texture2D(myImage, materialInput.st).rgb;\n material.diffuse = vcColor.rgb;\n material.alpha = vcColor.a;\n #ifdef FLAT\n ${webgl2 ? 'out_FragColor' : 'gl_FragColor'} = vec4(material.diffuse + material.emission, material.alpha);\n #else\n ${webgl2 ? 'out_FragColor' : 'gl_FragColor'} = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n #endif\n }\n `\n ]\n })\n\n const uniformsFace = {\n vcColor: function () {\n return that._faceColor\n }\n }\n\n const uniformsLine = {\n vcColor: function () {\n return that._lineColor\n }\n }\n\n const shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations\n })\n\n this._shaderprogram = shaderProgram\n const positionBuffer1 = Cesium['Buffer'].createVertexBuffer({\n context: context,\n typedArray: positionTypedArray1,\n usage: BufferUsage.STATIC_DRAW\n })\n const positionBuffer2 = Cesium['Buffer'].createVertexBuffer({\n context: context,\n typedArray: positionTypedArray2,\n usage: BufferUsage.STATIC_DRAW\n })\n\n const indexBuffer1 = Cesium['Buffer'].createIndexBuffer({\n context: context,\n typedArray: indexTypedArray1,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT\n })\n\n const indexBuffer2 = Cesium['Buffer'].createIndexBuffer({\n context: context,\n typedArray: indexTypedArray2,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT\n })\n\n const textureVA1 = new VertexArray({\n context: context,\n attributes: [\n {\n index: 0,\n vertexBuffer: positionBuffer1,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT\n },\n {\n index: 1,\n vertexBuffer: positionBuffer2,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT\n }\n ],\n indexBuffer: indexBuffer1\n })\n\n const textureVA2 = new VertexArray({\n context: context,\n attributes: [\n {\n index: 0,\n vertexBuffer: positionBuffer1,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT\n },\n {\n index: 1,\n vertexBuffer: positionBuffer2,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT\n }\n ],\n indexBuffer: indexBuffer2\n })\n\n this._initBoundingSphere = BoundingSphere.fromVertices(positionTypedArray1 as any)\n this._command = new DrawCommand({\n vertexArray: textureVA1,\n primitiveType: PrimitiveType.TRIANGLES,\n renderState: renderState,\n shaderProgram: shaderProgram,\n uniformMap: uniformsFace,\n owner: this,\n pass: Pass.TRANSLUCENT,\n modelMatrix: new Matrix4(),\n boundingVolume: new BoundingSphere(),\n cull: true\n })\n\n this._lineCommand = new DrawCommand({\n vertexArray: textureVA2,\n primitiveType: PrimitiveType.LINES,\n renderState: renderState,\n shaderProgram: shaderProgram,\n uniformMap: uniformsLine,\n owner: this,\n pass: Pass.TRANSLUCENT,\n modelMatrix: new Matrix4(),\n boundingVolume: new BoundingSphere(),\n cull: true\n })\n }\n\n _destroyVideoMemory() {\n const { defined } = Cesium\n this._shaderprogram = this._shaderprogram && this._shaderprogram.destroy()\n if (defined(this._command)) {\n this._command.vertexArray.destroy()\n this._command = undefined\n }\n if (defined(this._lineCommand)) {\n this._lineCommand.vertexArray.destroy()\n this._lineCommand = undefined\n }\n }\n}\n\nfunction createTypedArray(fovH: number, fovV: number, segmentHLength: number, segmentVLength: number) {\n const buffer = new Float32Array((segmentHLength + 1) * (segmentVLength + 1) * 3 + 3)\n for (let i = 0; i < segmentHLength + 1; i++) {\n for (let j = 0; j < segmentVLength + 1; j++) {\n const width = fovH * (i / segmentHLength - 0.5)\n const height = fovV * (j / segmentVLength - 0.5)\n const positions = [Math.cos(-width) * Math.cos(-height), Math.sin(-width) * Math.cos(-height), Math.sin(height)]\n buffer[3 * (j * (segmentHLength + 1) + i) + 0] = positions[0]\n buffer[3 * (j * (segmentHLength + 1) + i) + 1] = positions[1]\n buffer[3 * (j * (segmentHLength + 1) + i) + 2] = positions[2]\n }\n }\n\n buffer[(segmentHLength + 1) * (segmentVLength + 1) * 3 + 0] = 0\n buffer[(segmentHLength + 1) * (segmentVLength + 1) * 3 + 1] = 0\n buffer[(segmentHLength + 1) * (segmentVLength + 1) * 3 + 2] = 0\n return buffer\n}\n\nfunction generateIndices1(segmentHLength, segmentVLength) {\n const vertexCount = segmentHLength * segmentVLength * 6\n const indices = new Uint16Array(vertexCount)\n for (let i = 0; i < segmentHLength; i++) {\n for (let j = 0; j < segmentVLength; j++) {\n const a = j * (1 + segmentHLength) + i\n const b = j * (1 + segmentHLength) + i + 1\n const c = (j + 1) * (1 + segmentHLength) + i\n const d = (j + 1) * (1 + segmentHLength) + i + 1\n const quadIndex = 6 * (j * segmentHLength + i)\n indices[0 + quadIndex] = a\n indices[1 + quadIndex] = b\n indices[2 + quadIndex] = d\n indices[3 + quadIndex] = a\n indices[4 + quadIndex] = d\n indices[5 + quadIndex] = c\n }\n }\n\n return indices\n}\n\nfunction generateIndices2(segmentH, segmentV, subSegmentH, subSegmentV) {\n const segmentHLength = segmentH * subSegmentH\n const segmentVLength = segmentV * subSegmentV\n const indices = new Uint16Array((segmentH + 1) * (2 * segmentVLength) + (segmentV + 1) * (2 * segmentHLength) + 8)\n for (let i = 0; i < segmentH + 1; i++) {\n for (let j = 0; j < segmentVLength; j++) {\n const index = i * subSegmentH\n indices[2 * (i * segmentVLength + j) + 0] = j * (1 + segmentHLength) + index\n indices[2 * (i * segmentVLength + j) + 1] = (j + 1) * (1 + segmentHLength) + index\n }\n }\n\n const size = (segmentH + 1) * (2 * segmentVLength)\n for (let i = 0; i < segmentV; i++) {\n for (let j = 0; j < segmentHLength; j++) {\n const index = i * subSegmentV\n indices[size + 2 * (j + i * segmentHLength)] = index * (1 + segmentHLength) + j\n indices[size + 2 * (j + i * segmentHLength) + 1] = index * (1 + segmentHLength) + j + 1\n }\n }\n\n const index = (segmentH + 1) * (2 * segmentVLength) + (segmentV + 1) * (2 * segmentHLength)\n indices[index] = 0\n indices[index + 1] = (1 + segmentHLength) * (1 + segmentVLength)\n indices[index + 2] = segmentHLength\n indices[index + 3] = (1 + segmentHLength) * (1 + segmentVLength)\n indices[index + 4] = (1 + segmentHLength) * segmentVLength\n indices[index + 5] = (1 + segmentHLength) * (1 + segmentVLength)\n indices[index + 6] = (1 + segmentHLength) * (1 + segmentVLength) - 1\n indices[index + 7] = (1 + segmentHLength) * (1 + segmentVLength)\n\n return indices\n}\n\nexport default DebugCameraPrimitive\n"],"names":["index"],"mappings":"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"}