2013-05-08 55 views
0

在OpenGL中,我試圖將地形地圖使用texture3D獲得交融的紋理變化8個512x512的圖像。 但OpenGL的迫使我分配512x512x512數組,而不是512x512x8 什麼可以解決OpenGL的地形Texture3D地圖

+2

*「但OpenGL迫使我分配512x512x512陣列,而不是512x512x8什麼是解決方案」* - 是否真的?你是如何得出這個結論的?因爲只要你使用2.0以上的OpenGL版本(因此實現不超過10年),你可以使用任意的紋理尺寸(和寬高比)。 – 2013-05-08 15:31:44

+0

@ChristianRau:3D紋理從未被要求是立方體。你可以*總是*使用512x512x8(假設最大3D紋理尺寸允許512).. – 2013-05-08 15:51:56

+0

@NicolBolas Interresting,我認爲這是允許矩形尺寸的NPOT,但我想那時只適用於2D紋理。那麼512x8x512紋理怎麼樣(愚蠢的問題,但可能是2D子部分被特別處理?)? – 2013-05-08 16:57:10

回答

2

但Opengl的迫使我分配512x512x512

什麼給你的想法? 512×512×8是一種完全有效的3D紋理尺寸。對於地形,您也可以查看GL_TEXTURE_2D_ARRAY,它也使用glTexImage3D進行初始化,但不在圖層之間插值,在某些情況下非常有用。

+0

但我需要插值來將一個紋理混合到另一個紋理 – 2013-05-08 15:36:07

+0

@ user2362969:然後,只需使用GL_TEXTURE_3D,就可以使用您想使用的格式了。 – datenwolf 2013-05-08 15:51:37

+0

對不起,我得到了什麼我錯了....是的,它的工作 – 2013-05-08 16:27:47

0

即使您需要使用插值法將一個紋理混合到另一個紋理中,也應該嘗試使用GL_TEXTURE_2D_ARRAY,然後在片段着色器中手動混合紋理。 儘管利用自動硬件放大過濾器似乎更好,但請記住,對於GL_TEXTURE_3D實現,6個方向上的相鄰像素將被緩存的可能性更大,並且根據我的理解,您更強調組中的單個2D紋理以及它們的相鄰層,所以最好讓硬件製作3條緩存線,每條線都在4個方向上。 這是一個好主意,嘗試兩個,看看什麼更好