2016-11-12 79 views
1

如何通過GLSL樣只存儲陣列紋理裏面的Texture2D阿特拉斯的一部分畫裏面? 例如我有紋理地圖,並且我將它們放在一起(具有相同尺寸的其它圖冊) 的Texture2D陣列內。 (glTexSubImage3D)繪製的Texture2D圖譜紋理陣列

enter image description here

嗯,我應該採樣看起來像在這種情況下?

https://www.opengl.org/wiki/Array_Texture

https://www.opengl.org/wiki/Sampler_(GLSL)

我發現只有例子,如何選擇&從Array應用整機的質感,但如果我們的陣列 裏面我們存儲紋理圖集沒什麼關係。

回答

1

幸運的是,這是我一直在最近,與使用2D紋理陣列中的片段着色器,你可以這樣做以下區域:

#version 330 

uniform sampler2DArray tex; 

flat in uint fragLayer; 
in vec2 fragTexCoord; 

out vec4 colour; 

void main() 
{ 
    colour = texture(tex, vec3(fragTexCoord, fragLayer)); 
} 

因此,紋理層是第三用於訪問紋理數組中的單個像素的3d矢量元素。

另外請注意,如果您的原始圖像上直接使用天真(最簡單)glTexSubImage3d,則只有在所有圖塊均位於垂直線而不是網格的情況下才有效。

+0

我紋理地圖與陣列紋理工作,但他們必須在一條垂直線上,而不是一個網格像你說的。如何用網格完成?它還可以用一個數組紋理和一個像素數組指針來完成嗎?我猜你可能只是混淆了glTexSubImage3D偏移參數? –

+0

你不能使用網格的原因是因爲OpenGL並不是一個全面的實用程序庫,所以想要每個圖像的像素完全連續。然而,可以做什麼是一個記憶操作,將網格變成一條垂直線,然後將其傳遞給圖集(至少這是我所做的)。 – Nonanon