我正在尝试使用前一个渲染作为下一个渲染的纹理进行渐进式渲染。
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 不是库的一部分,它只在示例中找到,可能不受支持,但我真的会接受任何关于这种情况的建议,任何答案都将不胜感激。
至于有关该问题的任何其他信息,或其他可能对我有帮助的代码,我非常愿意分享。
你能指出我做错了什么吗?
我感谢你的好意。