123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * @author sunag / http://www.sunag.com.br/
- */
- import { NodeMaterial } from '../materials/NodeMaterial.js';
- import { ScreenNode } from '../inputs/ScreenNode.js';
- function NodePostProcessing( renderer, renderTarget ) {
- if ( renderTarget === undefined ) {
- var parameters = {
- minFilter: THREE.LinearFilter,
- magFilter: THREE.LinearFilter,
- format: THREE.RGBAFormat,
- stencilBuffer: false
- };
- var size = renderer.getDrawingBufferSize();
- renderTarget = new THREE.WebGLRenderTarget( size.width, size.height, parameters );
- }
- this.renderer = renderer;
- this.renderTarget = renderTarget;
- this.output = new ScreenNode();
- this.material = new NodeMaterial();
- this.camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
- this.scene = new THREE.Scene();
- this.quad = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), this.material );
- this.quad.frustumCulled = false; // Avoid getting clipped
- this.scene.add( this.quad );
- this.needsUpdate = true;
- }
- NodePostProcessing.prototype = {
- constructor: NodePostProcessing,
- render: function ( scene, camera, frame ) {
- if ( this.needsUpdate ) {
- this.material.dispose();
- this.material.fragment.value = this.output;
- this.material.build();
- if ( this.material.uniforms.renderTexture ) {
- this.material.uniforms.renderTexture.value = this.renderTarget.texture;
- }
- this.needsUpdate = false;
- }
- frame.setRenderer( this.renderer )
- .setRenderTexture( this.renderTarget.texture );
- this.renderer.setRenderTarget( this.renderTarget );
- this.renderer.render( scene, camera );
- frame.updateNode( this.material );
- this.renderer.setRenderTarget( null );
- this.renderer.render( this.scene, this.camera );
- },
- setSize: function ( width, height ) {
- this.renderTarget.setSize( width, height );
- this.renderer.setSize( width, height );
- },
- copy: function ( source ) {
- this.output = source.output;
- },
- toJSON: function ( meta ) {
- var isRootObject = ( meta === undefined || typeof meta === 'string' );
- if ( isRootObject ) {
- meta = {
- nodes: {}
- };
- }
- if ( meta && ! meta.post ) meta.post = {};
- if ( ! meta.post[ this.uuid ] ) {
- var data = {};
- data.uuid = this.uuid;
- data.type = "NodePostProcessing";
- meta.post[ this.uuid ] = data;
- if ( this.name !== "" ) data.name = this.name;
- if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;
- data.output = this.output.toJSON( meta ).uuid;
- }
- meta.post = this.uuid;
- return meta;
- }
- };
- export { NodePostProcessing };
|