66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { WebGLCubeRenderTarget, Scene, CubeCamera, BoxGeometry, Mesh, BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from 'three';
 | |
| import { equirectUV } from '../../nodes/utils/EquirectUVNode.js';
 | |
| import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
 | |
| import { positionWorldDirection } from '../../nodes/accessors/PositionNode.js';
 | |
| import { createNodeMaterialFromType } from '../../nodes/materials/NodeMaterial.js';
 | |
| 
 | |
| // @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
 | |
| 
 | |
| class CubeRenderTarget extends WebGLCubeRenderTarget {
 | |
| 
 | |
| 	constructor( size = 1, options = {} ) {
 | |
| 
 | |
| 		super( size, options );
 | |
| 
 | |
| 		this.isCubeRenderTarget = true;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	fromEquirectangularTexture( renderer, texture ) {
 | |
| 
 | |
| 		const currentMinFilter = texture.minFilter;
 | |
| 		const currentGenerateMipmaps = texture.generateMipmaps;
 | |
| 
 | |
| 		texture.generateMipmaps = true;
 | |
| 
 | |
| 		this.texture.type = texture.type;
 | |
| 		this.texture.colorSpace = texture.colorSpace;
 | |
| 
 | |
| 		this.texture.generateMipmaps = texture.generateMipmaps;
 | |
| 		this.texture.minFilter = texture.minFilter;
 | |
| 		this.texture.magFilter = texture.magFilter;
 | |
| 
 | |
| 		const geometry = new BoxGeometry( 5, 5, 5 );
 | |
| 
 | |
| 		const uvNode = equirectUV( positionWorldDirection );
 | |
| 
 | |
| 		const material = createNodeMaterialFromType( 'MeshBasicNodeMaterial' );
 | |
| 		material.colorNode = TSL_Texture( texture, uvNode, 0 );
 | |
| 		material.side = BackSide;
 | |
| 		material.blending = NoBlending;
 | |
| 
 | |
| 		const mesh = new Mesh( geometry, material );
 | |
| 
 | |
| 		const scene = new Scene();
 | |
| 		scene.add( mesh );
 | |
| 
 | |
| 		// Avoid blurred poles
 | |
| 		if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;
 | |
| 
 | |
| 		const camera = new CubeCamera( 1, 10, this );
 | |
| 		camera.update( renderer, scene );
 | |
| 
 | |
| 		texture.minFilter = currentMinFilter;
 | |
| 		texture.currentGenerateMipmaps = currentGenerateMipmaps;
 | |
| 
 | |
| 		mesh.geometry.dispose();
 | |
| 		mesh.material.dispose();
 | |
| 
 | |
| 		return this;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| export default CubeRenderTarget;
 |