Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >后期处理删除镜头光斑并导致错误: copyTexImage2D:帧缓冲区格式不兼容

后期处理删除镜头光斑并导致错误: copyTexImage2D:帧缓冲区格式不兼容
EN

Stack Overflow用户
提问于 2014-05-05 20:36:12
回答 1查看 227关注 0票数 0

给定镜头光斑示例:http://threejs.org/examples/#webgl_lensflares

为什么我不能正确处理此场景?块将正确显示,但光源和镜头光斑消失了,并且我在控制台中收到一堆警告: copyTexImage2D: framebuffer不兼容的格式。除了添加到init()render()循环中的以下代码片段外,我拥有的所有代码都是相同的:

代码语言:javascript
运行
AI代码解释
复制
// 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;

然后在我的渲染循环中,我有以下内容:

代码语言:javascript
运行
AI代码解释
复制
//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);
EN

回答 1

Stack Overflow用户

发布于 2014-05-05 22:54:07

找到了问题所在。它是这样排的:

代码语言:javascript
运行
AI代码解释
复制
// Notice: Takes *entire* canvas. 
composerScene = new THREE.EffectComposer(renderer,
  new THREE.WebGLRenderTarget(width, height, rtParameters));

因为我已经将场景分成两个不同的部分,宽度应该是width/2。所以修正后的代码是:

代码语言:javascript
运行
AI代码解释
复制
// Notice: Takes only the size of the image we want to render. 
composerScene = new THREE.EffectComposer(renderer,
  new THREE.WebGLRenderTarget(width/2, height, rtParameters));

请注意:这与镜头光斑无关。这个问题要根本性得多。很抱歉!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23481372

复制
相关文章

相似问题

处理后错误- copyTexImage2D:帧缓冲区的格式不兼容

37

three.js -镜头光斑和透明度

10

Objective-c如何在iOS中创建镜头光斑效果

10

仅使用CSS对文本使用变形镜头光斑效果

16

后期缓存替换与IIS集成管道中修改响应缓冲区的模块不兼容

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档