casc-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 29.2 kB
Source Map (JSON)
{"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: 2022-05-14 15:22:31\n * @LastEditors: zouyaoji\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 vs = new ShaderSource({\n sources: [\n `\n // 使用double类型的position进行计算\n // attribute vec3 position3DHigh;\n // attribute vec3 position3DLow;\n attribute vec3 position;\n attribute vec3 normal;\n // attribute vec2 st;\n // attribute float batchId;\n varying vec3 v_positionEC;\n 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 varying vec3 v_positionEC;\n 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 gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n #else\n 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":[],"mappings":"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"}