这是我的问题:
我想在4个虚拟象限和我想要的每个象限中分享画布 使用不同的颜色(使用不同的片段着色器)渲染相同的场景,以实时比较某些效果。我不知道该怎么做。 我应该在4种不同的纹理中渲染相同的场景4次,然后用这些纹理重新填充4个矩形吗?或者我应该制作另一个fshader并用这些纹理手动填充所有片段?是否可以使用渲染缓冲区对象来提高性能?
提前致谢,
答案 0 :(得分:7)
您不需要渲染到纹理(尽管这是一种方式)。实际上可以使用gl.viewport
更简单地完成。
gl.viewport
只需在画布上设置要渲染的矩形。任何超出该矩形的东西都会被裁剪掉。通常,您将其设置为与画布相同的大小,因为您想要全屏渲染,但在您的情况下,您可以执行以下操作:
// Clears the entire scene. gl.clear does not respect the viewport
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// Render upper left quadrant
gl.viewport(0, 0, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[0]);
// Render upper right quadrant
gl.viewport(canvas.width/2, 0, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[1]);
// Render lower left quadrant
gl.viewport(0, canvas.height/2, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[2]);
// Render lower right quadrant
gl.viewport(canvas.width/2, canvas.height/2, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[3]);
渲染时只渲染整个场景,您不需要做任何特殊的事情来解释新的视口。 (但是,如果您正在进行任何鼠标选择或类似操作,则需要考虑视口!)