7 Star 27 Fork 2

Vticn/DreamFields

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
PostProcessing.ts 2.14 KB
一键复制 编辑 原始数据 按行查看 历史
almighty 提交于 2022-04-24 09:38 +08:00 . 修改项目文档结构
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 );
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/vticn/dream-fields.git
git@gitee.com:vticn/dream-fields.git
vticn
dream-fields
DreamFields
master

搜索帮助