PackingNode.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import TempNode from '../core/TempNode.js';
  2. import { addNodeClass } from '../core/Node.js';
  3. import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
  4. class PackingNode extends TempNode {
  5. constructor( scope, node ) {
  6. super();
  7. this.scope = scope;
  8. this.node = node;
  9. }
  10. getNodeType( builder ) {
  11. return this.node.getNodeType( builder );
  12. }
  13. setup() {
  14. const { scope, node } = this;
  15. let result = null;
  16. if ( scope === PackingNode.DIRECTION_TO_COLOR ) {
  17. result = node.mul( 0.5 ).add( 0.5 );
  18. } else if ( scope === PackingNode.COLOR_TO_DIRECTION ) {
  19. result = node.mul( 2.0 ).sub( 1 );
  20. }
  21. return result;
  22. }
  23. }
  24. PackingNode.DIRECTION_TO_COLOR = 'directionToColor';
  25. PackingNode.COLOR_TO_DIRECTION = 'colorToDirection';
  26. export default PackingNode;
  27. export const directionToColor = nodeProxy( PackingNode, PackingNode.DIRECTION_TO_COLOR );
  28. export const colorToDirection = nodeProxy( PackingNode, PackingNode.COLOR_TO_DIRECTION );
  29. addNodeElement( 'directionToColor', directionToColor );
  30. addNodeElement( 'colorToDirection', colorToDirection );
  31. addNodeClass( 'PackingNode', PackingNode );