我需要模糊帧缓冲区,但我不知道如何使用 THREE.js 获取帧缓冲区。
我想模糊整个帧缓冲区,而不是模糊场景中的每个纹理。所以我想我应该读取帧缓冲区然后模糊,而不是在着色器中这样做。
这是我尝试过的:
初始化时调用:
var renderTarget = new THREE.WebGLRenderTarget(512, 512, {
wrapS: THREE.RepeatWrapping,
wrapT: THREE.RepeatWrapping,
minFilter: THREE.NearestFilter,
magFilter: THREE.NearestFilter,
format: THREE.RGBAFormat,
type: THREE.FloatType,
stencilBuffer: false,
depthBuffer: true
});
renderTarget.generateMipmaps = false;
在每一帧中调用:
var gl = renderer.getContext();
// render to target
renderer.render(scene, camera, renderTarget, false);
framebuffer = renderTarget.__webglFramebuffer;
console.log(framebuffer);
gl.flush();
if (framebuffer != null)
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
var width = height = 512;
var rdData = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, rdData);
console.log(rdData);
// render to screen
renderer.render(scene, camera);
但是framebuffer
是WebFramebuffer {}
并且rdData
充满了0
。我这样做是否正确?