juejin.cn/post/697611…
this.renderTarget = new THREE.WebGLRenderTarget(512, 512, {
encoding: this.renderer.outputEncoding
});
this.renderer.setRenderTarget(this.renderTarget);
this.renderer.render(this.scene, this.shadowCamera);
this.renderer.setRenderTarget(null);
this.renderTarget = new THREE.WebGLRenderTarget(512, 512, {
encoding: this.renderer.outputEncoding
});
this.renderer.setRenderTarget(this.renderTarget);
this.renderer.render(this.scene, this.shadowCamera);
this.shadowCamera = new THREE.OrthographicCamera(
-this.PLANE_WIDTH / 2,
this.PLANE_WIDTH / 2,
this.PLANE_HEIGHT / 2,
-this.PLANE_HEIGHT / 2,
0,
this.CAMERA_HEIGHT
);
this.renderer.setRenderTarget(null);
this.oldClearColor.copy(this.renderer.getClearColor());
this.oldClearAlpha = this.renderer.getClearAlpha();
XXX.visible = false;
this.renderer.setClearColor(0xffffff, 0);
this.scene.overrideMaterial = this.depthMaterial;
this.renderer.setRenderTarget(this.renderTarget);
this.renderer.render(this.scene, this.shadowCamera);
this.scene.overrideMaterial = null;
this.renderer.setClearColor(this.oldClearColor, this.oldClearAlpha);
this.renderer.setRenderTarget(null);
XXX.visible = true;
var material = new THREE.MeshBasicMaterial({
map: this.renderTarget.texture,
opacity: this.shadowState.opacity,
transparent: true,
depthWrite: false
});
- Three WebGLCubeRenderTarget
const cubeRenderTarget = new THREE.WebGLCubeRenderTarget( 128, { format: THREE.RGBFormat, generateMipmaps: true, minFilter: THREE.LinearMipmapLinearFilter } );
const cubeCamera = new THREE.CubeCamera( 1, 100000, cubeRenderTarget );
scene.add( cubeCamera );
const chromeMaterial = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeRenderTarget.texture } );
const car = new Mesh( carGeometry, chromeMaterial );
scene.add( car );
car.visible = false;
cubeCamera.position.copy( car.position );
cubeCamera.update( renderer, scene );
car.visible = true;
renderer.render( scene, camera );
- 不同的RenderTarget可以设置不同的setClearColor
renderer.setRenderTarget();
renderer.setClearColor(0x888888, 1);
renderer.clear();
renderer.setRenderTarget(targets[2]);
renderer.setClearColor(0, 0);
renderer.clear();
renderer.setRenderTarget(targets[1]);
renderer.setClearColor(0xffffff, 1);
renderer.clear();
renderer.setRenderTarget(targets[0]);
renderer.setClearColor(0, 0);
renderer.clear();
- 不同的RenderTarget可以设置不同的clear
- 当然也可以不设置clear 然后进行叠加
for (let i = 0; i < options.layers; i++) {
const flip = i % 2;
const flop = (i + 1) % 2;
globalPeelUniforms.uPrevDepthTexture.value = targets[flop];
renderer.setRenderTarget(targets[flip]);
renderer.setClearColor(0, 0);
renderer.clear(true, true, false);
renderer.render(scene, camera, targets[flip], false);
compositeMaterial.uniforms.uTextureA.value = targets[flip];
renderer.render(compositeScene, camera, targets[2]);
renderer.setRenderTarget(targets[flip]);
renderer.setClearColor(0xffffff, 1);
renderer.clear(true, true, false);
scene.overrideMaterial = depthMaterial;
renderer.render(scene, camera, targets[flip], false);
scene.overrideMaterial = null;
}