Download node_modules/three/examples/jsm/utils/TextureUtils.js from SimWorld-AI/industrial-harbor-viewer: direct link, hf CLI and curl.
- Browser
- Download file 2.37 kB
-
https://huggingface.co/spaces/SimWorld-AI/industrial-harbor-viewer/resolve/main/node_modules/three/examples/jsm/utils/TextureUtils.js
- Command line
-
hf download hf://spaces/SimWorld-AI/industrial-harbor-viewer/node_modules/three/examples/jsm/utils/TextureUtils.js
-
curl -L -o TextureUtils.js https://huggingface.co/spaces/SimWorld-AI/industrial-harbor-viewer/resolve/main/node_modules/three/examples/jsm/utils/TextureUtils.js
2.37 kB
| import { | |
| PlaneGeometry, | |
| ShaderMaterial, | |
| Uniform, | |
| Mesh, | |
| PerspectiveCamera, | |
| Scene, | |
| WebGLRenderer, | |
| CanvasTexture, | |
| SRGBColorSpace | |
| } from 'three'; | |
| let _renderer; | |
| let fullscreenQuadGeometry; | |
| let fullscreenQuadMaterial; | |
| let fullscreenQuad; | |
| export function decompress( texture, maxTextureSize = Infinity, renderer = null ) { | |
| if ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 ); | |
| if ( ! fullscreenQuadMaterial ) fullscreenQuadMaterial = new ShaderMaterial( { | |
| uniforms: { blitTexture: new Uniform( texture ) }, | |
| vertexShader: ` | |
| varying vec2 vUv; | |
| void main(){ | |
| vUv = uv; | |
| gl_Position = vec4(position.xy * 1.0,0.,.999999); | |
| }`, | |
| fragmentShader: ` | |
| uniform sampler2D blitTexture; | |
| varying vec2 vUv; | |
| void main(){ | |
| gl_FragColor = vec4(vUv.xy, 0, 1); | |
| #ifdef IS_SRGB | |
| gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) ); | |
| #else | |
| gl_FragColor = texture2D( blitTexture, vUv); | |
| #endif | |
| }` | |
| } ); | |
| fullscreenQuadMaterial.uniforms.blitTexture.value = texture; | |
| fullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace; | |
| fullscreenQuadMaterial.needsUpdate = true; | |
| if ( ! fullscreenQuad ) { | |
| fullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial ); | |
| fullscreenQuad.frustrumCulled = false; | |
| } | |
| const _camera = new PerspectiveCamera(); | |
| const _scene = new Scene(); | |
| _scene.add( fullscreenQuad ); | |
| if ( renderer === null ) { | |
| renderer = _renderer = new WebGLRenderer( { antialias: false } ); | |
| } | |
| const width = Math.min( texture.image.width, maxTextureSize ); | |
| const height = Math.min( texture.image.height, maxTextureSize ); | |
| renderer.setSize( width, height ); | |
| renderer.clear(); | |
| renderer.render( _scene, _camera ); | |
| const canvas = document.createElement( 'canvas' ); | |
| const context = canvas.getContext( '2d' ); | |
| canvas.width = width; | |
| canvas.height = height; | |
| context.drawImage( renderer.domElement, 0, 0, width, height ); | |
| const readableTexture = new CanvasTexture( canvas ); | |
| readableTexture.minFilter = texture.minFilter; | |
| readableTexture.magFilter = texture.magFilter; | |
| readableTexture.wrapS = texture.wrapS; | |
| readableTexture.wrapT = texture.wrapT; | |
| readableTexture.name = texture.name; | |
| if ( _renderer ) { | |
| _renderer.forceContextLoss(); | |
| _renderer.dispose(); | |
| _renderer = null; | |
| } | |
| return readableTexture; | |
| } | |