2
0

RotateUVNode.js 1014 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import TempNode from '../core/TempNode.js';
  2. import { addNodeClass } from '../core/Node.js';
  3. import { addNodeElement, nodeProxy, vec2 } from '../shadernode/ShaderNode.js';
  4. class RotateUVNode extends TempNode {
  5. constructor( uvNode, rotationNode, centerNode = vec2( 0.5 ) ) {
  6. super( 'vec2' );
  7. this.uvNode = uvNode;
  8. this.rotationNode = rotationNode;
  9. this.centerNode = centerNode;
  10. }
  11. construct() {
  12. const { uvNode, rotationNode, centerNode } = this;
  13. const cosAngle = rotationNode.cos();
  14. const sinAngle = rotationNode.sin();
  15. const vector = uvNode.sub( centerNode );
  16. const rotatedVector = vec2( // @TODO: Maybe we can create mat2 and write something like rotationMatrix.mul( vector )?
  17. vec2( cosAngle, sinAngle ).dot( vector ),
  18. vec2( sinAngle.negate(), cosAngle ).dot( vector )
  19. );
  20. return rotatedVector.add( centerNode );
  21. }
  22. }
  23. export default RotateUVNode;
  24. export const rotateUV = nodeProxy( RotateUVNode );
  25. addNodeElement( 'rotateUV', rotateUV );
  26. addNodeClass( RotateUVNode );