提交 85662391 编写于 作者: M Mugen87

JSM: Added module and TS file for GlitchPass.

上级 0b099231
......@@ -164,6 +164,7 @@
<li>DotScreenPass</li>
<li>EffectComposer</li>
<li>FilmPass</li>
<li>GlitchPass</li>
<li>MaskPass</li>
<li>RenderPass</li>
<li>SavePass</li>
......
......@@ -35,7 +35,7 @@ THREE.GlitchPass.prototype = Object.assign( Object.create( THREE.Pass.prototype
constructor: THREE.GlitchPass,
render: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
this.uniforms[ "tDiffuse" ].value = readBuffer.texture;
this.uniforms[ 'seed' ].value = Math.random();//default seeding
......
import {
ShaderMaterial,
DataTexture
} from '../../../src/Three';
import { Pass } from './Pass';
export class GlitchPass extends Pass {
constructor(dt_size?: number);
uniforms: object;
material: ShaderMaterial;
fsQuad: object;
goWild: boolean;
curF: number;
randX: number;
generateTrigger(): void;
generateHeightmap(dt_size: number): DataTexture;
}
/**
* @author alteredq / http://alteredqualia.com/
*/
import {
DataTexture,
FloatType,
Math as _Math,
RGBFormat,
ShaderMaterial,
UniformsUtils
} from "../../../build/three.module.js";
import { Pass } from "../postprocessing/Pass.js";
import { DigitalGlitch } from "../shaders/DigitalGlitch.js";
var GlitchPass = function ( dt_size ) {
Pass.call( this );
if ( DigitalGlitch === undefined ) console.error( "GlitchPass relies on DigitalGlitch" );
var shader = DigitalGlitch;
this.uniforms = UniformsUtils.clone( shader.uniforms );
if ( dt_size == undefined ) dt_size = 64;
this.uniforms[ "tDisp" ].value = this.generateHeightmap( dt_size );
this.material = new ShaderMaterial( {
uniforms: this.uniforms,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
} );
this.fsQuad = new Pass.FullScreenQuad( this.material );
this.goWild = false;
this.curF = 0;
this.generateTrigger();
};
GlitchPass.prototype = Object.assign( Object.create( Pass.prototype ), {
constructor: GlitchPass,
render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
this.uniforms[ "tDiffuse" ].value = readBuffer.texture;
this.uniforms[ 'seed' ].value = Math.random();//default seeding
this.uniforms[ 'byp' ].value = 0;
if ( this.curF % this.randX == 0 || this.goWild == true ) {
this.uniforms[ 'amount' ].value = Math.random() / 30;
this.uniforms[ 'angle' ].value = _Math.randFloat( - Math.PI, Math.PI );
this.uniforms[ 'seed_x' ].value = _Math.randFloat( - 1, 1 );
this.uniforms[ 'seed_y' ].value = _Math.randFloat( - 1, 1 );
this.uniforms[ 'distortion_x' ].value = _Math.randFloat( 0, 1 );
this.uniforms[ 'distortion_y' ].value = _Math.randFloat( 0, 1 );
this.curF = 0;
this.generateTrigger();
} else if ( this.curF % this.randX < this.randX / 5 ) {
this.uniforms[ 'amount' ].value = Math.random() / 90;
this.uniforms[ 'angle' ].value = _Math.randFloat( - Math.PI, Math.PI );
this.uniforms[ 'distortion_x' ].value = _Math.randFloat( 0, 1 );
this.uniforms[ 'distortion_y' ].value = _Math.randFloat( 0, 1 );
this.uniforms[ 'seed_x' ].value = _Math.randFloat( - 0.3, 0.3 );
this.uniforms[ 'seed_y' ].value = _Math.randFloat( - 0.3, 0.3 );
} else if ( this.goWild == false ) {
this.uniforms[ 'byp' ].value = 1;
}
this.curF ++;
if ( this.renderToScreen ) {
renderer.setRenderTarget( null );
this.fsQuad.render( renderer );
} else {
renderer.setRenderTarget( writeBuffer );
if ( this.clear ) renderer.clear();
this.fsQuad.render( renderer );
}
},
generateTrigger: function () {
this.randX = _Math.randInt( 120, 240 );
},
generateHeightmap: function ( dt_size ) {
var data_arr = new Float32Array( dt_size * dt_size * 3 );
var length = dt_size * dt_size;
for ( var i = 0; i < length; i ++ ) {
var val = _Math.randFloat( 0, 1 );
data_arr[ i * 3 + 0 ] = val;
data_arr[ i * 3 + 1 ] = val;
data_arr[ i * 3 + 2 ] = val;
}
var texture = new DataTexture( data_arr, dt_size, dt_size, RGBFormat, FloatType );
texture.needsUpdate = true;
return texture;
}
} );
export { GlitchPass };
......@@ -73,6 +73,7 @@ var files = [
{ path: 'postprocessing/DotScreenPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'DotScreenShader', path: 'shaders/DotScreenShader.js' } ], ignoreList: [] },
{ path: 'postprocessing/EffectComposer.js', dependencies: [ { name: 'CopyShader', path: 'shaders/CopyShader.js' }, { name: 'ShaderPass', path: 'postprocessing/ShaderPass.js' }, { name: 'MaskPass', path: 'postprocessing/MaskPass.js' }, { name: 'ClearMaskPass', path: 'postprocessing/MaskPass.js' } ], ignoreList: [] },
{ path: 'postprocessing/FilmPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'FilmShader', path: 'shaders/FilmShader.js' } ], ignoreList: [] },
{ path: 'postprocessing/GlitchPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'DigitalGlitch', path: 'shaders/DigitalGlitch.js' } ], ignoreList: [] },
{ path: 'postprocessing/MaskPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
{ path: 'postprocessing/RenderPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
{ path: 'postprocessing/SavePass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'CopyShader', path: 'shaders/CopyShader.js' } ], ignoreList: [] },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册