You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.1 KiB
56 lines
1.1 KiB
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 );
|