{"version":3,"file":"CircleSweepPass.mjs","sources":["../../../../packages/ThreePassCircle/CircleSweepPass.ts"],"sourcesContent":["import {\r\n  Vector3,\r\n  WebGLRenderTarget,\r\n  Color,\r\n  RGBAFormat,\r\n  NearestFilter,\r\n  DepthTexture,\r\n  UnsignedShortType,\r\n  ShaderMaterial,\r\n  Vector2\r\n} from 'three'\r\nimport {FullScreenQuad, Pass} from 'three/examples/jsm/postprocessing/Pass.js'\r\nimport type {\r\n  Scene\r\n, WebGLRenderer\r\n} from 'three';\r\n\r\nimport type {CircleOptions} from \"./Type\";\r\n\r\n/**\r\n * @author huaqing / https://github.com/2912401452/\r\n */\r\nclass CircleSweepPass extends Pass{\r\n  scene: Scene\r\n  camera: any\r\n  center: Vector3\r\n  innerRadius = 0\r\n  outerRadius = 0\r\n  fillType = 1\r\n  fillColor: Color\r\n  depthTarget: WebGLRenderTarget\r\n  renderer: any\r\n  depthMaterial: ShaderMaterial\r\n  fsQuad: FullScreenQuad\r\n  topLeftVec: Vector3\r\n  topRightVec: Vector3\r\n  bottomLeftVec: Vector3\r\n  bottomRightVec: Vector3\r\n  width = 0\r\n  height = 0\r\n\r\n  constructor(renderer: WebGLRenderer, scene: Scene, camera, options: CircleOptions) {\r\n    console.log('renderer.extensions.has( \\'WEBGL_depth_texture\\' )', renderer.extensions.has( 'WEBGL_depth_texture' ))\r\n    super();\r\n    const size = new Vector2();\r\n    renderer.getSize(size);\r\n    this.width  = size.x;\r\n    this.height = size.y;\r\n    this.scene = scene;\r\n    this.camera = camera;\r\n    options = options ? options : {};\r\n    this.center = options.center ? options.center : new Vector3( 0, 0, 0 );\r\n    this.innerRadius = options.innerRadius ? options.innerRadius : 0;\r\n    this.outerRadius = options.outerRadius ? options.outerRadius : 0;\r\n    this.fillType = options.fillType ? options.fillType : 1; // pure: 0 - linear: 1\r\n    this.fillColor = options.fillColor ? options.fillColor : new Color( 1, 1, 1 );\r\n\r\n    this.depthTarget = new WebGLRenderTarget( window.innerWidth, window.innerHeight );\r\n    this.depthTarget.texture.format = RGBAFormat;\r\n    this.depthTarget.texture.minFilter = NearestFilter;\r\n    this.depthTarget.texture.magFilter = NearestFilter;\r\n    this.depthTarget.texture.generateMipmaps = false;\r\n    this.depthTarget.stencilBuffer = false;\r\n    this.depthTarget.depthBuffer = true;\r\n    this.depthTarget.depthTexture = new DepthTexture(size.x, size.y);\r\n    this.depthTarget.depthTexture.type = UnsignedShortType;\r\n\r\n    const { topLeftVec, topRightVec, bottomLeftVec, bottomRightVec } = this.calCameraVectors()\r\n    this.topLeftVec = topLeftVec;\r\n    this.topRightVec = topRightVec;\r\n    this.bottomLeftVec = bottomLeftVec;\r\n    this.bottomRightVec = bottomRightVec;\r\n\r\n    this.depthMaterial = this.getDepthMaterial();\r\n\r\n    this.depthMaterial.uniforms[ 'fillColor' ].value = this.fillColor;\r\n\r\n    this.fsQuad = new FullScreenQuad( this.depthMaterial );\r\n  }\r\n\r\n  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\r\n\r\n    this.depthMaterial.uniforms[ 'colorTexture' ].value = readBuffer.texture;\r\n\r\n    const { topLeftVec, topRightVec, bottomLeftVec, bottomRightVec } = this.calCameraVectors();\r\n\r\n    this.depthMaterial.uniforms[ 'cameraPos' ].value = this.camera.position;\r\n    this.depthMaterial.uniforms[ 'topLeftVec' ].value = topLeftVec;\r\n    this.depthMaterial.uniforms[ 'topRightVec' ].value = topRightVec;\r\n    this.depthMaterial.uniforms[ 'bottomLeftVec' ].value = bottomLeftVec;\r\n    this.depthMaterial.uniforms[ 'bottomRightVec' ].value = bottomRightVec;\r\n\r\n    renderer.setRenderTarget( this.depthTarget );\r\n    renderer.render( this.scene, this.camera );\r\n\r\n    renderer.setRenderTarget( null );\r\n    this.fsQuad.render( renderer );\r\n\r\n  }\r\n\r\n  calCameraVectors() {\r\n    const camera = this.camera;\r\n    const near = camera.near;\r\n    const { fov, aspect } = camera;\r\n    const h = Math.tan( this.ang2rad( fov / 2 ) ) * near;\r\n    const w = h * aspect;\r\n\r\n    // let forwardDir = (new Vector3(0, 0, 1).applyMatrix4(camera.matrixWorld)).sub(camera.position.clone()).normalize()\r\n    // let rightDir = (new Vector3(1, 0, 0).applyMatrix4(camera.matrixWorld)).sub(camera.position.clone()).normalize()\r\n    // let topDir = (new Vector3(0, 1, 0).applyMatrix4(camera.matrixWorld)).sub(camera.position.clone()).normalize()\r\n\r\n    const forwardDir = ( new Vector3( 0, 0, 1 ).applyMatrix4( camera.matrixWorld.clone() ) );\r\n    forwardDir.sub( camera.position.clone() );\r\n    forwardDir.normalize();\r\n\r\n    const rightDir = ( new Vector3( - 1, 0, 0 ).applyMatrix4( camera.matrixWorld.clone() ) );\r\n    rightDir.sub( camera.position.clone() );\r\n    rightDir.normalize();\r\n\r\n    const topDir = ( new Vector3( 0, - 1, 0 ).applyMatrix4( camera.matrixWorld.clone() ) );\r\n    topDir.sub( camera.position.clone() );\r\n    topDir.normalize();\r\n\r\n\r\n    const toRight = rightDir.multiplyScalar( w );\r\n    const toTop = topDir.multiplyScalar( h );\r\n\r\n    const topLeftVec = ( forwardDir.clone().multiplyScalar( near ) ).add( toTop.clone() ).sub( toRight.clone() );\r\n    const scale = topLeftVec.length() / near;\r\n\r\n    topLeftVec.normalize();\r\n    topLeftVec.multiplyScalar( - scale );\r\n\r\n    const topRightVec = ( forwardDir.clone().multiplyScalar( near ) ).add( toRight.clone() ).add( toTop.clone() );\r\n    topRightVec.normalize();\r\n    topRightVec.multiplyScalar( - scale );\r\n\r\n    const bottomLeftVec = ( forwardDir.clone().multiplyScalar( near ) ).sub( toTop.clone() ).sub( toRight.clone() );\r\n    bottomLeftVec.normalize();\r\n    bottomLeftVec.multiplyScalar( - scale );\r\n\r\n    const bottomRightVec = ( forwardDir.clone().multiplyScalar( near ) ).add( toRight.clone() ).sub( toTop.clone() );\r\n    bottomRightVec.normalize();\r\n    bottomRightVec.multiplyScalar( - scale );\r\n\r\n    return { topLeftVec, topRightVec, bottomLeftVec, bottomRightVec };\r\n\r\n  }\r\n\r\n  ang2rad(ang) { // 角度变弧度\r\n    return (ang * Math.PI) / 180;\r\n  }\r\n\r\n  getDepthMaterial() {\r\n    return new ShaderMaterial( {\r\n      uniforms: {\r\n        'colorTexture': { value: null },\r\n        'depthTexture': { value: this.depthTarget.depthTexture },\r\n        'cameraFar': { value: this.camera.far },\r\n        'cameraNear': { value: this.camera.near },\r\n        'cameraPos': { value: this.camera.position.clone() },\r\n        'topLeftVec': { value: this.topLeftVec },\r\n        'topRightVec': { value: this.topRightVec },\r\n        'bottomLeftVec': { value: this.bottomLeftVec },\r\n        'bottomRightVec': { value: this.bottomRightVec },\r\n        'center': { value: this.center },\r\n        'innerRadius': { value: this.innerRadius },\r\n        'outerRadius': { value: this.outerRadius },\r\n        'fillType': { value: this.fillType },\r\n        'fillColor': { value: this.fillColor }\r\n      },\r\n      transparent: true,\r\n      vertexShader:\r\n        `\r\n                precision highp float;\r\n                uniform vec3 topLeftVec;\r\n                uniform vec3 topRightVec;\r\n                uniform vec3 bottomLeftVec;\r\n                uniform vec3 bottomRightVec;\r\n\r\n                varying vec2 vUv;\r\n                varying vec3 cameraVec;\r\n\r\n                void main() {\r\n                    vUv = uv;\r\n                    if(uv.x < 0.5 && uv.y < 0.5) { // bottom left\r\n                        cameraVec = bottomLeftVec;\r\n                    }else if(uv.x < 0.5 && uv.y > 0.5) { // top left\r\n                        cameraVec = topLeftVec;\r\n                    }else if(uv.x > 0.5 && uv.y > 0.5) { // top right\r\n                        cameraVec = topRightVec;\r\n                    }else { // bottom right\r\n                        cameraVec = bottomRightVec;\r\n                    }\r\n\r\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n\t\t\t\t}`,\r\n      fragmentShader:\r\n        `\r\n                #include <packing>\r\n                varying vec2 vUv;\r\n                varying vec3 cameraVec;\r\n\r\n                uniform float cameraFar;\r\n                uniform float cameraNear;\r\n                uniform vec3 cameraPos;\r\n                uniform sampler2D colorTexture;\r\n                uniform sampler2D depthTexture;\r\n\r\n                uniform vec3 center;\r\n                uniform float innerRadius;\r\n                uniform float outerRadius;\r\n                uniform int fillType;\r\n                uniform vec3 fillColor;\r\n\r\n                float readClipZ( sampler2D depthSampler, vec2 coord ) {\r\n                    float fragCoordZ = texture2D( depthSampler, coord ).x;\r\n                    return perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar ); // 返回相机空间的 viewZ（相对于相机空间的实际z）\r\n                }\r\n\r\n                void main() {\r\n                    float clipZ = readClipZ( depthTexture, vUv );\r\n                    vec4 depthColor = texture2D( depthTexture, vUv);\r\n                    vec4 diff = texture2D( colorTexture, vUv);\r\n                    vec3 wP = cameraPos + (cameraVec)*abs(clipZ);\r\n\r\n                    float dis = distance(wP, center);\r\n                    float circleWidth = outerRadius - innerRadius;\r\n                    if(dis < outerRadius && dis > innerRadius) {\r\n                        //gl_FragColor = vec4(mix(diff.xyz, fillColor, 0.5), 1.0);\r\n                        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n                    }else {\r\n                        gl_FragColor = diff;\r\n                        //gl_FragColor = vec4(0.0, 0.5, 0.0, 1.0);\r\n                    }\r\n                    gl_FragColor = vec4(diff.r, 0.0,0.0, 1.0);;\r\n                    //if(depthColor.r == 0.0){\r\n                    //  gl_FragColor = vec4(1.0, 0,0.0, 1.0);\r\n                    //}else{\r\n                    //  gl_FragColor = vec4(0, 1.0,0.0, 1.0);\r\n                    //}\r\n                    //gl_FragColor = vec4(depthColor.r, 0.0,0.0, 1.0);\r\n                }`\r\n    } );\r\n  }\r\n  setSize( width, height ) {\r\n\r\n    this.width = width;\r\n    this.height = height;\r\n\r\n    this.depthTarget.setSize( width, height );\r\n\r\n  }\r\n  setCamera(camera){\r\n    this.camera = camera;\r\n  }\r\n}\r\n\r\nexport {CircleSweepPass}\r\n"],"names":[],"mappings":"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"}