我正在尝试使用之前的渲染作为下一个渲染的渐变渲染。
EDIT 1:
正如评论中所建议的,我确实将我的THREE.js版本更新为最新版本,并保留了我的旧代码,结果是相同的(即使对象的垂直位置翻转)。我的问题仍然存在。请考虑我的更新,并寻求帮助。
Original message:
我的片段着色器应该只增加绿色通道上的颜色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);
其中renderModel是RenderPass,渲染我的场景,其中我有一个平面和一个立方体。
和screenPass和feedPass是唯一的区别,一个是在屏幕上渲染另一个渲染在writeBuffer(composer.renderTarget1
)。
var renderModel = new THREE.RenderPass(scene, camera);
renderModel.clear = false;
screenPass = new THREE.ShaderPass(shader2, 'sampa');
screenPass.renderToScreen = true;
screenPass.clear = false;
screenPass.needsSwap = false;
feedPass = new THREE.ShaderPass(shader2, 'sampa');
feedPass.renderToScreen = false;
feedPass.clear = false;
feedPass.needsSwap = false;
在动画循环中,我有类似的东西:
composer.render();
if(step % 250 == 0)
{
newmat = new THREE.MeshBasicMaterial(
{
map : composer.renderTarget1
});
plane.material = newmat;
}
step++;
requestAnimationFrame(animate);
step % 250
的部分是为了延迟材料的更改。
无论如何,问题是当发生这种情况时飞机正在消失。即使它在前250个步骤中正确渲染。我猜它仍然存在,但没有纹理数据,所以它实际上没有渲染。
我知道EffectComposer不是库的一部分,它只在示例中找到,可能不受支持,但我真的会对这种情况提出任何建议,任何答案都将不胜感激。
至于有关该问题的任何其他信息,或其他一些可能对我非常愿意分享的代码。
你能指出我做错了什么吗?
我感谢你的善意。
答案 0 :(得分:0)
这个问题的解决方案似乎是使用two
RenderTargets,并在每一步都切换它们。我有限的知识使我无法理解为什么,但这正是EffectComposer的工作原理。
对于可能遇到此问题且需要解决方案的用户,您应尝试将needsSwap
设置为true
以进行着色器传递。
如果您不使用EffectComposer,请记住使用两个rendertargets。