CubeTextureNode.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import TextureNode from './TextureNode.js';
  2. import { reflectVector, refractVector } from './ReflectVectorNode.js';
  3. import { addNodeClass } from '../core/Node.js';
  4. import { addNodeElement, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
  5. import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
  6. class CubeTextureNode extends TextureNode {
  7. constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
  8. super( value, uvNode, levelNode, biasNode );
  9. this.isCubeTextureNode = true;
  10. }
  11. getInputType( /*builder*/ ) {
  12. return 'cubeTexture';
  13. }
  14. getDefaultUV() {
  15. const texture = this.value;
  16. if ( texture.mapping === CubeReflectionMapping ) {
  17. return reflectVector;
  18. } else if ( texture.mapping === CubeRefractionMapping ) {
  19. return refractVector;
  20. } else {
  21. console.error( 'THREE.CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
  22. return vec3( 0, 0, 0 );
  23. }
  24. }
  25. setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
  26. setupUV( builder, uvNode ) {
  27. const texture = this.value;
  28. if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ! texture.isRenderTargetTexture ) {
  29. return vec3( uvNode.x.negate(), uvNode.yz );
  30. } else {
  31. return uvNode;
  32. }
  33. }
  34. generateUV( builder, cubeUV ) {
  35. return cubeUV.build( builder, 'vec3' );
  36. }
  37. }
  38. export default CubeTextureNode;
  39. export const cubeTexture = nodeProxy( CubeTextureNode );
  40. addNodeElement( 'cubeTexture', cubeTexture );
  41. addNodeClass( 'CubeTextureNode', CubeTextureNode );