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;
							 |