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