Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GLSL]uniform int ID jako indeks tablicy tekstur

Ostatnio zmodyfikowano 2016-02-19 21:29
Autor Wiadomość
fokusx
Temat założony przez niniejszego użytkownika
[GLSL]uniform int ID jako indeks tablicy tekstur
» 2016-02-18 20:08:26
Mam we Fragment Shader podany "uniform int num_textures".
Niezrozumiały dla mnie jest błąd zapisu (frag_colour += texture(textures[num_textures - 1], texcoord_scale[num_textures-1] * texcoord)) - przedostatnia linijka:
C/C++
void main() {
    frag_colour = vec4( 0.0, 0.0, 0.0, 0.0 );
   
    float sv = 1.0;
    for( int i = 0; i < num_textures - 1; ++i )
    {
        float v = channel( int( ceil( i / 3 ) ), i % 3 );
        sv -= v;
        frag_colour += texture( textures[ i ], texcoord_scale[ i ] * texcoord ) * v;
    }
    frag_colour += texture( textures[ num_textures - 1 ], texcoord_scale[ num_textures - 1 ] * texcoord ) * sv;
}

Nie wyświetla mi tej tekstury (ostatniej). Jeśli jednak wrzucę to do pętli:
C/C++
void main() {
    frag_colour = vec4( 0.0, 0.0, 0.0, 0.0 );
   
    float sv = 1.0;
    for( int i = 0; i < num_textures; ++i )
    {
        if( i == num_textures - 1 )
        {
            frag_colour += texture( textures[ i ], texcoord_scale[ i ] * texcoord ) * sv;
        }
        else
        {
            float v = channel( int( ceil( i / 3 ) ), i % 3 );
            sv -= v;
            frag_colour += texture( textures[ i ], texcoord_scale[ i ] * texcoord ) * v;
        }
    }
}
Problem zniknie ...
Dlaczego się tak dzieje? Dodam, że jak podam ręcznie indeks ostatniej tekstury problem również zniknie.
P-145000
pekfos
» 2016-02-19 21:29:44
P-145058
« 1 »
  Strona 1 z 1