TangentNode.js 1.1 KB

1234567891011121314151617181920212223
  1. import { attribute } from '../core/AttributeNode.js';
  2. import { varying } from '../core/VaryingNode.js';
  3. import { cameraViewMatrix } from './CameraNode.js';
  4. import { modelViewMatrix } from './ModelNode.js';
  5. import { tslFn, vec4 } from '../shadernode/ShaderNode.js';
  6. export const tangentGeometry = /*#__PURE__*/ tslFn( ( stack, builder ) => {
  7. if ( builder.geometry.hasAttribute( 'tangent' ) === false ) {
  8. builder.geometry.computeTangents();
  9. }
  10. return attribute( 'tangent', 'vec4' );
  11. } )();
  12. export const tangentLocal = /*#__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLocal' );
  13. export const tangentView = /*#__PURE__*/ varying( modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz, 'v_tangentView' ).normalize().toVar( 'tangentView' );
  14. export const tangentWorld = /*#__PURE__*/ varying( tangentView.transformDirection( cameraViewMatrix ), 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
  15. export const transformedTangentView = /*#__PURE__*/ tangentView.toVar( 'transformedTangentView' );
  16. export const transformedTangentWorld = /*#__PURE__*/ transformedTangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedTangentWorld' );