【发布时间】:2012-04-02 07:56:47
【问题描述】:
我一直在尝试创建一个多视口 webgl 应用程序。
我使用 viewport+scissor 为每个视图渲染得非常好。 但现在我想改进渲染并只渲染更新的视图,所以跳过过度绘制。 我做了一个小演示来展示这个想法:http://kile.stravaganza.org/lab/js/scissor/
据我了解 scissor 是假设它只会渲染当前的剪刀框并保持画布的其余部分不受影响。但似乎它只是不断清除每一帧上的整个画布,无论我尝试什么:(
这是渲染代码(它应该只渲染一次并保留在每一帧上的最后一个视图):
function drawScene()
{
gl.clearColor(1.0, 0.0, 0.0, 0.0);
gl.scissor(0,0,200,200);
gl.viewport(0,0,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
gl.clearColor(0.0, 1.0, 0.0, 0.0);
gl.scissor(200,0,200,200);
gl.viewport(200,0,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
gl.clearColor(0.0, 0.0, 1.0, 0.0);
gl.scissor(200,200,200,200);
gl.viewport(200,200,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
// Render just once
if (first)
{
gl.clearColor(1.0, 1.0, 0.0, 0.0);
gl.scissor(0,200,200,200);
gl.viewport(0,200,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
first=false;
}
}
知道如何实现这种效果吗?
非常感谢您
【问题讨论】:
标签: html canvas webgl viewport