{"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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"}