2013-08-29 95 views
1

我發現我的opengl可以支持的最大紋理尺寸是8192,但是我使用的圖像是16997x15931。正如您在此鏈接中看到的,我已完成課程COpenGLControl並將其定製爲供我自己使用,以使用較小的7697x7309圖像併爲其啓動不同的導航任務。如何從opengl中的大圖像創建紋理(大於MAX_TEXTURE_SIZE)

Render an outlined red rectangle on top a 2D texture in OpenGL

,但現在在工作的最後階段,我決定改變,其中適用紋理的部分,使其能夠處理更大的圖像比大小8192

問題:

  • 在我的opengl中可能嗎?
  • 什麼概念我應該學習mipmap,多重紋理?
  • 它會擴展代碼的性能嗎?

現在我的程序使用271 MB RAM的只是顯示這個小圖像(7697x7309)和我將任務添加到它(圖像處理過濾過程),我用我所有的努力以優化代碼,但它使用376 MB的RAM(7697x7309)圖像(該代碼已被編寫爲控制檯應用程序將與此項目結合使用)。所以我認爲最後的項目會在7000x7000尺寸附近使用高達700 MB的RAM。顯然對於更大的圖像(16997x15931),ram的使用將會更高!

所以我在尋找一個概念來處理比MAX_TEXTURE_SIZE更大的圖像,同時優化了程序的性能

更多的問題:

  • 我應該在OpenGL的學習理念是什麼要達到上述目標嗎?
  • 解釋一下你建議的概念嗎?

我的問題的Game Developement太多,但決定在這裏重複的問題也許就會有更多的觀衆。只要我得到答案,我會從網站上刪除問題。所以不要擔心多個問題。

+0

MegaTextures呢? http://www.opengl.org/registry/specs/AMD/sparse_texture.txt和這裏http://renderingpipeline.com/2012/03/partially-resident-textures-amd_sparse_texture/ – fen

+0

我不使用現代的OpenGL和你看我在我的課堂上使用舊的WGL API,因爲我已經習慣了。是否支持在不贊成的OpenGL作爲[這個答案的評論說](http://stackoverflow.com/a/18478717/1245120)說的? @fen – sepideh

+1

你能檢查你的硬件支持哪些opengl版本嗎?現代的opengl通過使用擴展來啓用,動態加載。如果你不能使用超級紋理,那麼你可以有4個紋理是從你的巨大紋理的一部分創建的。然後在應用程序中,你必須管理它們。同時尋找壓縮機制,如DXT紋理和壓縮(也支持通過opengl擴展) – fen

回答

2

我會盡量總結我對原始問題的評論。

  • 知道你的正確的opengl版本:也許你可以加載一些現代的擴展和工作,甚至最近的版本的opengl。
  • ,以減少內存,你可以使用一些紋理壓縮:
  • 另一個簡單的想法:你可以拆分巨大的紋理,並創建4個較小的紋理(從16k x 16k到四個8k x 8k),並以某種方式呈現四個方塊。
  • 也許你可以使用OpenCL或CUDA來完成這項工作?
  • 關於mipmapps:它是一套較小版本的輸入紋理,mipmap可以提高濾鏡的性能和最終質量,但是對於具有完整mipmap鏈紋理,您需要另外33%的內存。在你的情況下,他們可能會非常有幫助。例如,當你從很遠的距離看牆時,你不必使用完整(大)的紋理......只有它的一個小版本就足夠了。 g-truc on mipmaps

一般來說有很多選擇,但它取決於你的經驗什麼更簡單和最快的實現。

+0

謝謝我在使用opengl方面經驗不足,事實上這是我的第一個程序,但我會在未來的項目中採納所有的建議,但僅僅是爲了好奇什麼是mipmap的使用呢? – sepideh

+0

感謝@fen從一個簡短的研究中我發現,mipmapps就像GIS應用程序中的金字塔,使圖像比原始圖像的大小更小,並將其用於快速導航任務?所以即使使用mipmap也不能解決我的問題。它只是使我的8000x8000圖像的較小版本?但是,如果我使用多個紋理,如你所建議的使用mipmap概念構建我的原始圖像的四個紋理將增強渲染性能?我對嗎? **我覺得像我這樣的初學者多紋理是最好的解決問題的快速** – sepideh

+0

你想在一些3d牆上顯示它嗎?也許你可以縮放你的輸入紋理到一些較小的版本(即使使用一些照片應用程序),然後在程序中使用它? – fen