CameraNode.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import Object3DNode from './Object3DNode.js';
  2. import { addNodeClass } from '../core/Node.js';
  3. import { nodeImmutable } from '../shadernode/ShaderNode.js';
  4. class CameraNode extends Object3DNode {
  5. constructor( scope = CameraNode.POSITION ) {
  6. super( scope );
  7. }
  8. getNodeType( builder ) {
  9. const scope = this.scope;
  10. if ( scope === CameraNode.PROJECTION_MATRIX ) {
  11. return 'mat4';
  12. }
  13. return super.getNodeType( builder );
  14. }
  15. update( frame ) {
  16. const camera = frame.camera;
  17. const uniformNode = this._uniformNode;
  18. const scope = this.scope;
  19. if ( scope === CameraNode.PROJECTION_MATRIX ) {
  20. uniformNode.value = camera.projectionMatrix;
  21. } else if ( scope === CameraNode.VIEW_MATRIX ) {
  22. uniformNode.value = camera.matrixWorldInverse;
  23. } else {
  24. this.object3d = camera;
  25. super.update( frame );
  26. }
  27. }
  28. generate( builder ) {
  29. const scope = this.scope;
  30. if ( scope === CameraNode.PROJECTION_MATRIX ) {
  31. this._uniformNode.nodeType = 'mat4';
  32. }
  33. return super.generate( builder );
  34. }
  35. }
  36. CameraNode.PROJECTION_MATRIX = 'projectionMatrix';
  37. export default CameraNode;
  38. export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
  39. export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
  40. export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
  41. export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
  42. export const cameraPosition = nodeImmutable( CameraNode, CameraNode.POSITION );
  43. addNodeClass( CameraNode );