2016-02-05 98 views
0

我有一個背景紋理和透明圖層紋理。 當我只加載這些紋理時_layer3最終紋理處於活動狀態。多活動紋理opengl

我希望所有的紋理都應該處於活動狀態,以便我知道圖層要進一步處理。

glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture[0]);//texture _floorTexture 
    glUniform1i(_textureUniform, 0); 
      //glUniform1i(glPrograms[currentProgram].glUniforms[_textureUniform],_floorTexture); 

    glActiveTexture(GL_TEXTURE0 + 1); 
    glBindTexture(GL_TEXTURE_2D, texture[1]); //_layer0 
    glUniform1i(_textureUniform, 1); 

    glActiveTexture(GL_TEXTURE0 + 2); 
    glBindTexture(GL_TEXTURE_2D, texture[2]); //_layer1 
    glUniform1i(_textureUniform, 2); 

    glActiveTexture(GL_TEXTURE0 + 3); 
    glBindTexture(GL_TEXTURE_2D, texture[3]); //_layer2 
    glUniform1i(_textureUniform, 3); 

    glActiveTexture(GL_TEXTURE0 + 4); 
    glBindTexture(GL_TEXTURE_2D, texture[4]); //_layer3 
    glUniform1i(_textureUniform, 4); 
+0

當你想使用多重紋理,你還需要在着色器的多個採樣,並結合他們的結果。 Atm,你會在每次紋理綁定之後覆蓋制服的綁定。 – BDL

+0

嗨,你可以分享多個紋理的示例着色器嗎? – SathiyaKrishnan

回答

0

當使用多個紋理時,還必須在着色器中使用多個採樣器。這可能看起來像這樣:

in vec2 uv; 

out vec3 color; 

uniform sampler2D floor_texture; 
uniform sampler2D layer0_texture; 

void main() 
{ 
    vec4 f = texture(floor_texture, uv); 
    vec4 l0 = texture(layer0_texture, uv); 

    color = mix(f.rgb, l0.rgb, 1 - l0.a); 
} 

請注意,組成取決於你想達到什麼,這只是一個例子。

+0

感謝您的代碼。立即嘗試並回復你.. – SathiyaKrishnan

+0

它顯示灰色屏幕。 – SathiyaKrishnan

+0

你是否正在設置兩個採樣器制服?當你用0或1替換混合的第三個參數時會發生什麼? – BDL

-2

這是我的着色器

precision highp float; 
varying vec2 interpolatedTextureCoordinate; 
uniform sampler2D sourceTexture; 
uniform float amount; 
uniform sampler2D layerTexture; 
const float PI = 3.14159265358979323846264; 
const vec4 backgroundColor = vec4(0.0, 0.0, 0.0, 1.0); 
const vec2 center = vec2(0.5, 0.5); 
void main() 
{ 
vec4 source = texture2D(sourceTexture, interpolatedTextureCoordinate); 
vec4 layer0 = texture2D(layerTexture, interpolatedTextureCoordinate); 
float sigma = amount; 
float distance = distance(center, interpolatedTextureCoordinate); 
loat alpha = 2.0 * (1.0/sqrt(2.0 * PI)) * exp((-sigma) * pow(distance, 2.0)); 
gl_FragColor = mix(source.rgb, layer0.rgb , 1-layer0.a); 

} 

問候 Sathiya