[GLSL]uniform int ID jako indeks tablicy tekstur
Ostatnio zmodyfikowano 2016-02-19 21:29
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: 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: 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. |
|
pekfos |
» 2016-02-19 21:29:44 |
|
« 1 » |