| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | import Node from '../core/Node.js';import Matrix4Node from '../inputs/Matrix4Node.js';import Matrix3Node from '../inputs/Matrix3Node.js';import Vector3Node from '../inputs/Vector3Node.js';import { NodeUpdateType } from '../core/constants.js';class Object3DNode extends Node {	static VIEW_MATRIX = 'viewMatrix';	static NORMAL_MATRIX = 'normalMatrix';	static WORLD_MATRIX = 'worldMatrix';	static POSITION = 'position';	static VIEW_POSITION = 'viewPosition';	constructor( scope = Object3DNode.VIEW_MATRIX, object3d = null ) {		super();		this.scope = scope;		this.object3d = object3d;		this.updateType = NodeUpdateType.Object;		this._inputNode = null;	}	getNodeType() {		const scope = this.scope;		if ( scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX ) {			return 'mat4';		} else if ( scope === Object3DNode.NORMAL_MATRIX ) {			return 'mat3';		} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION ) {			return 'vec3';		}	}	update( frame ) {		const object = this.object3d !== null ? this.object3d : frame.object;		const inputNode = this._inputNode;		const camera = frame.camera;		const scope = this.scope;		if ( scope === Object3DNode.VIEW_MATRIX ) {			inputNode.value = object.modelViewMatrix;		} else if ( scope === Object3DNode.NORMAL_MATRIX ) {			inputNode.value = object.normalMatrix;		} else if ( scope === Object3DNode.WORLD_MATRIX ) {			inputNode.value = object.matrixWorld;		} else if ( scope === Object3DNode.POSITION ) {			inputNode.value.setFromMatrixPosition( object.matrixWorld );		} else if ( scope === Object3DNode.VIEW_POSITION ) {			inputNode.value.setFromMatrixPosition( object.matrixWorld );			inputNode.value.applyMatrix4( camera.matrixWorldInverse );		}	}	generate( builder ) {		const scope = this.scope;		if ( scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX ) {			this._inputNode = new Matrix4Node( /*null*/ );		} else if ( scope === Object3DNode.NORMAL_MATRIX ) {			this._inputNode = new Matrix3Node( /*null*/ );		} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION ) {			this._inputNode = new Vector3Node();		}		return this._inputNode.build( builder );	}}export default Object3DNode;
 |