2015-10-17 50 views
-1

我想從OpenGL中的應用程序(如20000x20000)中獲取非常大的屏幕截圖,以便在橫幅上打印。首先,由於最大的GPU紋理尺寸限制,我無法創建如此大的幀緩衝區。任何人都可以幫助我如何捕捉不同塊的幀緩衝區?從場景中拍攝非常大的屏幕截圖

回答

3

正如您已經指出的那樣,通過多次通過捕獲它是一條路。在最簡單的形式中,您可以使用多遍,每遍渲染場景的一部分。

要獲得適當的圖像子區域,只​​需要對頂點的剪輯空間位置應用另一個轉換。這歸結爲簡單翻譯和定標在xy

當考慮裁剪空間的euclidiean 解釋 - 歸一化設備空間 - 觀看體積被表示在所有立方體[-1,1] 3個維度。

要僅渲染該立方體的一個軸對齊的子區域,我們必須對其進行放大,以便只有子區域適合[-1,1]區域,並且我們必須正確翻譯它。

假設我們希望將圖像分成的mn瓷磚的均勻網格,我們可以做的渲染瓷磚ij當下列轉換:

  1. 移動瓷磚左下方的起源。那瓦位置將在(-1 + 2*i/m, -1 + 2*j/n),所以我們必須與否定值翻譯:

    x' = x + 1 - 2*i/my' = y + 1 - 2*j/n

    這只是一個輔助的步驟做最後的翻譯工作更容易。

  2. 因素m和沿x和y方向n規模:

    x'' = m * x' = x * m + m - 2*iy'' = y' * n = y * n + n - 2*j

  3. 將瓷磚現在對準,使得它在原點和的左下角(依然)右上方中心位於(2,2),因此只需將其翻回(-1, -1),以便我們再次在視圖中結束:

    x''' = x'' - 1 = x * m + m - 2*i - 1y''' = y'' - 1 = y * n + n - 2*j - 1

這可以課的的被表示爲簡單的仿射變換矩陣:

( m  0  0 m - 2*i - 1) 
( 0  n  0 n - 2*j - 1) 
( 0  0  1  0 ) 
( 0  0  0  1 ) 

在大多數情況下,可以簡單的預乘上矩陣到投影矩陣(或任何矩陣你使用),並且在渲染過程中不需要改變其他任何東西。