Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 无法将当前结果传递给下一个渲染_Three.js_Webgl_Textures - Fatal编程技术网

Three.js 无法将当前结果传递给下一个渲染

Three.js 无法将当前结果传递给下一个渲染,three.js,webgl,textures,Three.js,Webgl,Textures,我正在尝试使用上一个渲染作为下一个渲染的纹理进行渐进渲染 EDIT 1:正如评论中所建议的,我确实将我的THREE.js版本更新到了最新版本,并保留了我的旧代码,结果是一样的(即使对象的垂直位置翻转)。我的问题仍然存在。请考虑我的更新和我的帮助请求。 原始消息: 我的片段着色器应仅将绿色通道上的颜色增量为0.1,如下所示: #ifdef GL_ES precision highp float; #endif uniform sampler2D sampa; varying vec2 tc; v

我正在尝试使用上一个渲染作为下一个渲染的纹理进行渐进渲染

EDIT 1:
正如评论中所建议的,我确实将我的THREE.js版本更新到了最新版本,并保留了我的旧代码,结果是一样的(即使对象的垂直位置翻转)。我的问题仍然存在。请考虑我的更新和我的帮助请求。
原始消息:

我的片段着色器应仅将绿色通道上的颜色增量为0.1,如下所示:

#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D sampa;
varying vec2 tc;

void main(void)
{
     vec4 c = texture2D(sampa, tc);
     vec4 t = vec4(c.x, c.y + .1, c.z, 1.);
     gl_FragColor = t;
}
composer.addPass(renderModel);
composer.addPass(screenPass);
composer.addPass(feedPass);
composer.render();
if(step % 250 == 0)
{
    newmat = new THREE.MeshBasicMaterial(
    {
        map : composer.renderTarget1
    });

    plane.material = newmat;
}
step++;
requestAnimationFrame(animate);
我的作曲家是这样的:

#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D sampa;
varying vec2 tc;

void main(void)
{
     vec4 c = texture2D(sampa, tc);
     vec4 t = vec4(c.x, c.y + .1, c.z, 1.);
     gl_FragColor = t;
}
composer.addPass(renderModel);
composer.addPass(screenPass);
composer.addPass(feedPass);
composer.render();
if(step % 250 == 0)
{
    newmat = new THREE.MeshBasicMaterial(
    {
        map : composer.renderTarget1
    });

    plane.material = newmat;
}
step++;
requestAnimationFrame(animate);
其中renderModel是一个RenderPass,用于渲染具有平面和立方体的场景。 screenPass和feedPass是相同的,唯一的区别是一个在屏幕上渲染,另一个在writeBuffer中渲染(
composer.renderTarget1

在动画循环中,我有如下内容:

#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D sampa;
varying vec2 tc;

void main(void)
{
     vec4 c = texture2D(sampa, tc);
     vec4 t = vec4(c.x, c.y + .1, c.z, 1.);
     gl_FragColor = t;
}
composer.addPass(renderModel);
composer.addPass(screenPass);
composer.addPass(feedPass);
composer.render();
if(step % 250 == 0)
{
    newmat = new THREE.MeshBasicMaterial(
    {
        map : composer.renderTarget1
    });

    plane.material = newmat;
}
step++;
requestAnimationFrame(animate);
执行
步骤%250的零件将延迟材料更换

不管怎么说,问题是当这种情况发生时,飞机正在消失。即使在前250步中已正确渲染。我猜它仍然在那里,但是没有纹理数据,所以它实际上没有被渲染

我知道EffectComposer不是库的一部分,它只能在示例中找到,可能不受支持,但我真的愿意接受关于这种情况的任何建议,任何答案都将不胜感激

至于关于这个问题的任何其他信息,或者其他一些可能有帮助的代码,我非常愿意与大家分享

你能指出我做错了什么吗


感谢您的好意。

似乎解决此问题的方法是使用两个
渲染目标,并在每一步中在它们之间切换。我有限的知识使我无法确切地理解为什么,但这正是EffectComposer的工作原理。 对于可能存在此问题并需要解决方案的用户,您应该尝试将着色器过程的
needsSwap
设置为
true

如果不使用EffectComposer,请记住使用两个rendertargets。

很抱歉,您必须升级到当前版本r.55。很少有人知道一年前的代码是什么样子的。@WestLangley是否有与r.55兼容的effectcomposer版本?因为每次我更改版本时,我的代码都会被破坏。目前有许多使用EffectComposer的three.js示例。此外,有关升级提示,请参见wiki:@WestLangley感谢您提供的
迁移
链接。至于使用某种
backbuffer
的EffectComposer示例,我找不到任何,我认为这实际上是我的问题。EffectComposer在幕后使用乒乓球。我相信这就是它处理并发问题的方式。无论如何,祝你好运!