【发布时间】:2013-02-27 13:06:45
【问题描述】:
我需要对帧缓冲区进行模糊处理,但不知道如何使用 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。我这样做的方式是否正确?
【问题讨论】:
-
这不会模糊“场景中的每个纹理”。
-
@NicolBolas 那我应该如何对整个场景进行细节模糊处理?
-
我想你会发现这篇文章对你的问题很有洞察力:stackoverflow.com/questions/15077762/…
标签: three.js glsl shader framebuffer