代码拉取完成,页面将自动刷新
import * as THREE from 'three';
import passThrowVert from './Shader/vertexShader/passThrow';
type InputRenderTarget = { [key:string]: THREE.Texture | THREE.Texture[] };
export interface PPParam extends THREE.ShaderMaterialParameters{
inputRenderTargets?: string
}
export class PostProcessing {
private renderer: THREE.WebGLRenderer;
private scene: THREE.Scene;
private camera: THREE.OrthographicCamera;
private screen: THREE.Mesh;
public effect: {
material: THREE.ShaderMaterial,
};
constructor( renderer: THREE.WebGLRenderer, ppParam: PPParam, customGeometry?: THREE.BufferGeometry ) {
this.renderer = renderer;
this.scene = new THREE.Scene();
this.camera = new THREE.OrthographicCamera( - 1.0, 1.0, 1.0, - 1.0 );
this.screen = new THREE.Mesh( customGeometry || new THREE.PlaneBufferGeometry( 2, 2 ) );
this.scene.add( this.screen );
ppParam.vertexShader = ppParam.vertexShader || passThrowVert;
ppParam.uniforms = ppParam.uniforms || {};
ppParam.uniforms.resolution = {
value: new THREE.Vector2()
};
this.effect = {
material: new THREE.ShaderMaterial( ppParam ),
};
}
public render( inputRenderTargets: InputRenderTarget | null, renderTarget: THREE.WebGLRenderTarget | null = null ) {
let renderTargetMem = this.renderer.getRenderTarget();
let effect = this.effect;
let material = effect.material;
let uniforms = material.uniforms;
if ( inputRenderTargets ) {
let keys = Object.keys( inputRenderTargets );
for ( let j = 0; j < keys.length; j ++ ) {
if ( uniforms[ keys[ j ] ] ) {
uniforms[ keys[ j ] ].value = inputRenderTargets[ keys[ j ] ];
} else {
uniforms[ keys[ j ] ] = { value: inputRenderTargets[ keys[ j ] ] };
effect.material.needsUpdate = true;
effect.material.uniforms = uniforms;
}
}
}
if ( renderTarget ) {
uniforms.resolution.value.set( renderTarget.width, renderTarget.height );
} else {
this.renderer.getSize( uniforms.resolution.value );
}
this.screen.material = material;
this.renderer.setRenderTarget( renderTarget );
this.renderer.render( this.scene, this.camera );
this.renderer.setRenderTarget( renderTargetMem );
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。