CubeTextureNode.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import TextureNode from './TextureNode.js';
  2. import { reflectVector } from './ReflectVectorNode.js';
  3. import { addNodeClass } from '../core/Node.js';
  4. import { addNodeElement, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
  5. import { WebGPUCoordinateSystem } from 'three';
  6. class CubeTextureNode extends TextureNode {
  7. constructor( value, uvNode = null, levelNode = null ) {
  8. super( value, uvNode, levelNode );
  9. this.isCubeTextureNode = true;
  10. }
  11. getInputType( /*builder*/ ) {
  12. return 'cubeTexture';
  13. }
  14. getDefaultUV() {
  15. return reflectVector;
  16. }
  17. setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
  18. setupUV( builder, uvNode ) {
  19. const texture = this.value;
  20. if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ! texture.isRenderTargetTexture ) {
  21. return vec3( uvNode.x.negate(), uvNode.yz );
  22. } else {
  23. return uvNode;
  24. }
  25. }
  26. generateUV( builder, cubeUV ) {
  27. return cubeUV.build( builder, 'vec3' );
  28. }
  29. }
  30. export default CubeTextureNode;
  31. export const cubeTexture = nodeProxy( CubeTextureNode );
  32. addNodeElement( 'cubeTexture', cubeTexture );
  33. addNodeClass( 'CubeTextureNode', CubeTextureNode );