Для этого вам не нужен рендер в текстуру (хотя это один из способов). На самом деле это можно сделать намного проще с помощью 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]);
При рендеринге просто визуализируйте всю сцену, как обычно, вам не нужно делать ничего особенного для учета нового окна просмотра. (Однако, если вы делаете какой-либо выбор мыши или что-то подобное, вам нужно учитывать область просмотра!)
person
Toji
schedule
11.01.2012