56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import TempNode from '../core/TempNode.js'; | ||
|  | import { addNodeClass } from '../core/Node.js'; | ||
|  | import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js'; | ||
|  | 
 | ||
|  | class PackingNode extends TempNode { | ||
|  | 
 | ||
|  | 	constructor( scope, node ) { | ||
|  | 
 | ||
|  | 		super(); | ||
|  | 
 | ||
|  | 		this.scope = scope; | ||
|  | 		this.node = node; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	getNodeType( builder ) { | ||
|  | 
 | ||
|  | 		return this.node.getNodeType( builder ); | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	setup() { | ||
|  | 
 | ||
|  | 		const { scope, node } = this; | ||
|  | 
 | ||
|  | 		let result = null; | ||
|  | 
 | ||
|  | 		if ( scope === PackingNode.DIRECTION_TO_COLOR ) { | ||
|  | 
 | ||
|  | 			result = node.mul( 0.5 ).add( 0.5 ); | ||
|  | 
 | ||
|  | 		} else if ( scope === PackingNode.COLOR_TO_DIRECTION ) { | ||
|  | 
 | ||
|  | 			result = node.mul( 2.0 ).sub( 1 ); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return result; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | PackingNode.DIRECTION_TO_COLOR = 'directionToColor'; | ||
|  | PackingNode.COLOR_TO_DIRECTION = 'colorToDirection'; | ||
|  | 
 | ||
|  | export default PackingNode; | ||
|  | 
 | ||
|  | export const directionToColor = nodeProxy( PackingNode, PackingNode.DIRECTION_TO_COLOR ); | ||
|  | export const colorToDirection = nodeProxy( PackingNode, PackingNode.COLOR_TO_DIRECTION ); | ||
|  | 
 | ||
|  | addNodeElement( 'directionToColor', directionToColor ); | ||
|  | addNodeElement( 'colorToDirection', colorToDirection ); | ||
|  | 
 | ||
|  | addNodeClass( 'PackingNode', PackingNode ); |