ModelViewProjectionNode.js 944 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { addNodeClass } from '../core/Node.js';
  2. import TempNode from '../core/TempNode.js';
  3. import { cameraProjectionMatrix } from './CameraNode.js';
  4. import { modelViewMatrix } from './ModelNode.js';
  5. import { positionLocal } from './PositionNode.js';
  6. import { nodeProxy } from '../shadernode/ShaderNode.js';
  7. import { varying } from '../core/VaryingNode.js';
  8. class ModelViewProjectionNode extends TempNode {
  9. constructor( positionNode = null ) {
  10. super( 'vec4' );
  11. this.positionNode = positionNode;
  12. }
  13. setup( builder ) {
  14. if ( builder.shaderStage === 'fragment' ) {
  15. return varying( builder.context.mvp );
  16. }
  17. const position = this.positionNode || positionLocal;
  18. return cameraProjectionMatrix.mul( modelViewMatrix ).mul( position );
  19. }
  20. }
  21. export default ModelViewProjectionNode;
  22. export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
  23. addNodeClass( 'ModelViewProjectionNode', ModelViewProjectionNode );