EquirectUVNode.js 772 B

12345678910111213141516171819202122232425262728293031323334
  1. import TempNode from '../core/TempNode.js';
  2. import { negate } from '../math/MathNode.js';
  3. import { positionWorldDirection } from '../accessors/PositionNode.js';
  4. import { nodeProxy, vec2 } from '../shadernode/ShaderNode.js';
  5. import { addNodeClass } from '../core/Node.js';
  6. class EquirectUVNode extends TempNode {
  7. constructor( dirNode = positionWorldDirection ) {
  8. super( 'vec2' );
  9. this.dirNode = dirNode;
  10. }
  11. construct() {
  12. const dir = negate( this.dirNode );
  13. const u = dir.z.atan2( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
  14. const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
  15. return vec2( u, v );
  16. }
  17. }
  18. export default EquirectUVNode;
  19. export const equirectUV = nodeProxy( EquirectUVNode );
  20. addNodeClass( EquirectUVNode );