我想從OpenGL中的應用程序(如20000x20000)中獲取非常大的屏幕截圖,以便在橫幅上打印。首先,由於最大的GPU紋理尺寸限制,我無法創建如此大的幀緩衝區。任何人都可以幫助我如何捕捉不同塊的幀緩衝區?從場景中拍攝非常大的屏幕截圖
-1
A
回答
3
正如您已經指出的那樣,通過多次通過捕獲它是一條路。在最簡單的形式中,您可以使用多遍,每遍渲染場景的一部分。
要獲得適當的圖像子區域,只需要對頂點的剪輯空間位置應用另一個轉換。這歸結爲簡單翻譯和定標在x
和y
:
當考慮裁剪空間的euclidiean 解釋 - 歸一化設備空間 - 觀看體積被表示在所有立方體[-1,1] 3個維度。
要僅渲染該立方體的一個軸對齊的子區域,我們必須對其進行放大,以便只有子區域適合[-1,1]區域,並且我們必須正確翻譯它。
假設我們希望將圖像分成的m
倍n
瓷磚的均勻網格,我們可以做的渲染瓷磚i
,j
當下列轉換:
移動瓷磚左下方的起源。那瓦位置將在
(-1 + 2*i/m, -1 + 2*j/n)
,所以我們必須與否定值翻譯:x' = x + 1 - 2*i/m
,y' = y + 1 - 2*j/n
這只是一個輔助的步驟做最後的翻譯工作更容易。
因素
m
和沿x和y方向n
規模:x'' = m * x' = x * m + m - 2*i
,y'' = y' * n = y * n + n - 2*j
將瓷磚現在對準,使得它在原點和的左下角(依然)右上方中心位於(2,2),因此只需將其翻回
(-1, -1)
,以便我們再次在視圖中結束:x''' = x'' - 1 = x * m + m - 2*i - 1
,y''' = 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 )
在大多數情況下,可以簡單的預乘上矩陣到投影矩陣(或任何矩陣你使用),並且在渲染過程中不需要改變其他任何東西。
相關問題
- 1. Android - 拍攝屏幕截圖
- 2. 從flv視頻拍攝屏幕截圖
- 3. 在GLUT中拍攝屏幕截圖
- 4. 在XNA中拍攝屏幕截圖
- 5. 拍攝UIWebView的快照/屏幕截圖
- 6. 定期拍攝屏幕截圖
- 7. 如何拍攝終端屏幕截圖
- 8. 拍攝屏幕截圖(含root)
- 9. 以silverlight 5/xna拍攝屏幕截圖
- 10. 使用Selenium拍攝屏幕截圖
- 11. 拍攝iOS中整個屏幕的屏幕截圖
- 12. 以編程方式拍攝整個屏幕的屏幕截圖
- 13. 調整使用UIGraphicsBeginImageContextWithOptions拍攝的屏幕截圖調整大小
- 14. 在Windows Phone 8中拍攝鎖屏的屏幕截圖
- 15. 如何從Android中運行視頻拍攝屏幕截圖
- 16. 以場景的屏幕截圖或2.2
- 17. 僅使用X11 lib拍攝C中的窗口屏幕截圖
- 18. 在Android中拍攝SurfaceView的屏幕截圖
- 19. 在php中拍攝網頁的屏幕截圖
- 20. MPMoviePlayerController拍攝屏幕截圖,但只顯示黑屏
- 21. 拍攝mac屏幕
- 22. 拍攝透明圖像的屏幕截圖android
- 23. 拍攝整個視圖的屏幕截圖(swift3)
- 24. 如何在Android中以編程方式拍攝屏幕截圖?
- 25. 使用java在全屏幕應用程序中拍攝屏幕截圖?
- 26. 拍攝到屏幕中心
- 27. 如何拍攝尚未加載的UIView的屏幕截圖?
- 28. 拍攝網頁上的Adobe Flash播放器的屏幕截圖
- 29. 拍攝Raspberry Pi上的UWP應用程序的屏幕截圖
- 30. 如何在屏幕鎖定時拍攝前景應用(如音樂)的截圖?