给定镜头光斑示例:http://threejs.org/examples/#webgl_lensflares,
为什么我不能正确处理此场景?块将正确显示,但光源和镜头光斑消失了,并且我在控制台中收到一堆警告: copyTexImage2D: framebuffer不兼容的格式。除了添加到init()
和render()
循环中的以下代码片段外,我拥有的所有代码都是相同的:
// init()
//
// Post Processing (
//
var rtParameters = {
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
format: THREE.RGBFormat,
stencilBuffer: true
};
// Vignette scene.
var shaderVignette = THREE.VignetteShader;
var effectVignette = new THREE.ShaderPass(shaderVignette);
effectVignette.uniforms[ "offset" ].value = 0.95;
effectVignette.uniforms[ "darkness" ].value = 1.6;
// What are these??
var clearMask = new THREE.ClearMaskPass();
var renderMask = new THREE.MaskPass(scene, camera);
effectVignette.renderToScreen = true;
// Render entire scene as a texture.
var renderModel = new THREE.RenderPass(scene, camera);
// renderModel.clear = false;
// Notice: Takes *entire* canvas.
composerScene = new THREE.EffectComposer(renderer,
new THREE.WebGLRenderTarget(width, height, rtParameters));
composerScene.addPass(renderModel);
composerScene.addPass(clearMask);
// Not sure what this does... renderTarget2 is the buffer we read from...
renderScene = new THREE.TexturePass(composerScene.renderTarget2);
// Add first composer -- don't add any passes except for renderScene.
composer1 = new THREE.EffectComposer(renderer,
new THREE.WebGLRenderTarget(width / 2, height, rtParameters));
composer1.addPass(renderScene);
composer1.addPass(effectVignette);
// Add second composer -- do image processing passes here.
composer2 = new THREE.EffectComposer(renderer,
new THREE.WebGLRenderTarget(width / 2, height, rtParameters));
composer2.addPass(renderScene);
composer2.addPass(effectVignette);
renderScene.uniforms[ "tDiffuse" ].value = composerScene.renderTarget2;
然后在我的渲染循环中,我有以下内容:
//render()
// Set view port to entire region
renderer.setViewport(0, 0, width, height);
renderer.clear();
composerScene.render(delta);
// Render original scene.
renderer.setViewport(0, 0, width / 2, height);
composer1.render(delta);
// Render modified scene.
renderer.setViewport(width / 2, 0, width / 2, height);
composer2.render(delta);
发布于 2014-05-05 22:54:07
找到了问题所在。它是这样排的:
// Notice: Takes *entire* canvas.
composerScene = new THREE.EffectComposer(renderer,
new THREE.WebGLRenderTarget(width, height, rtParameters));
因为我已经将场景分成两个不同的部分,宽度应该是width/2。所以修正后的代码是:
// Notice: Takes only the size of the image we want to render.
composerScene = new THREE.EffectComposer(renderer,
new THREE.WebGLRenderTarget(width/2, height, rtParameters));
请注意:这与镜头光斑无关。这个问题要根本性得多。很抱歉!
https://stackoverflow.com/questions/23481372
复制