2016-02-05 5 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

Вы устанавливаете обе формы сэмплера? Что произойдет, если вы замените третий параметр mix на 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

Смежные вопросы