gl.glTexImage2D
是做什麼用的?文檔說它「上傳紋理數據」。但是這是否意味着整個圖像在GPU內存中?我想用一個大的圖像文件進行紋理映射。此外:我可以簡單地使用VBO來獲取uv和位置座標來繪製紋理嗎?OpenGL glTexImage2D是做什麼的?
對,我在這裏用錯誤的方式說話。我的意思是攜帶一個二維UV座標陣列和一個二維數組模型,將較大的PNG圖像(在紋理內存中)二次採樣到各個瓦片模型上。我這裏的困惑在於不知道這些提取能夠多快。可以說我有一個5000x5000像素的圖像。我將它作爲紋理加載。然後我創建我自己的算法來獲取它的一部分來繪製。我在哪裏可以節省繪製這些瓷磚的帶寬?如果我實現了LOD算法來確定哪些貼圖靠近,哪些遠離攝像機,那麼如何在內存中管理每個貼圖?加載的問題我知道,但我正在努力尋找最好的實施開始。我正在爲使用OpenGL ES 2.0的移動設備開發。
謝謝喬納森。我想用一個大的PNG文件來表示地形。爲了補充這個難題,我還在一個稍微粗糙的細節處設置了一個高度值網格。我的想法是使用紋理映射方案將它的紋理分解成瓦片。這是大多數人用於渲染大型地形場景的一般方法嗎?謝謝! – Fra 2014-10-22 02:56:53
@Fra:紋理貼圖不會把事情分解成瓷磚。話雖如此,流血尖端的技術就是走相反的道路,即將許多小質地的瓷磚合併成一個大(稀疏)的質地。現代GPU具有內存管理單元,可以在需要時從CPU內存中獲取所需的紋理部分,並根據需要更換不需要的部分。然而,你需要一個相當新的GPU(2012-ish或更高版本)才能獲得支持。如果要將較大的圖像平鋪到較小的圖塊中,則每個圖塊必須成爲單獨的圖塊,或者使用2D紋理數組。 – datenwolf 2014-10-22 07:54:00
@Fra:你所描述的可能是兩件事之一。如果您正在通過在同一紋理空間內保存多個細節級別來節省繪製時間,那麼MipMapping可能適合您。它在圖像加載時創建圖像的多個縮放副本。如果您正在討論更多基於sprite的引擎,其中單個紋理圖紙用於多個不同的圖像,那麼使您的u,v映射座標是通用的,並使用統一變量(glUniform)來選擇應繪製哪個圖塊。 – Jonathan 2014-10-22 17:14:04