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

[OpenGL] Usuwanie koloru (czarnego) tła

Ostatnio zmodyfikowano 2013-05-17 14:01
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[OpenGL] Usuwanie koloru (czarnego) tła
» 2013-05-17 13:39:11
W moim zamierzeniu kod funkcji, który widać poniżej, ma za zadanie wczytać
teksturę i usunąć z niej czarny kolor. Jednakże funkcja ta działa tylko  w 50% bo wczytuje tylko teksturę ale nie usuwa czarnego koloru:(. Czy ktoś mógłby powiedzieć co w tej funkcji jest źle zrobione? Co dodać/usunąć co poprawić etc.!?
Przykłady kodu mile widziane... Miłego dnia!

C/C++
void LadujTekstury()
{
    AUX_RGBImageRec * Tekstura;
   
    //utworzenie identyfikatorów tekstur iloœci ile_tekstur
    //o adresie pocz¹tkowym &texture[0]
    glGenTextures( 1, & texture[ 0 ] );
   
    BYTE * dane1;
    if( Tekstura = auxDIBImageLoad( "Data/tile6.bmp" ) )
    {
        int w =(( Tekstura->sizeX ) * 4 ) * Tekstura->sizeY;
        dane1 = new BYTE[ w ];
       
        int k = 0, l = 0;
        while( k < w )
        {
            dane1[ k ] = Tekstura->data[ l ];
            dane1[ k + 1 ] = Tekstura->data[ l + 1 ];
            dane1[ k + 2 ] = Tekstura->data[ l + 2 ];
            if(( Tekstura->data[ l ] + Tekstura->data[ l + 1 ] + Tekstura->data[ l + 2 ] ) == 0 )
                 dane1[ k + 3 ] = 0; else dane1[ k + 3 ] = 255;
           
            k += 4;
            l += 3;
        }
       
        //dowi¹zanie identyfikatora do stanu tekstury
        glBindTexture( GL_TEXTURE_2D, texture[ 1 ] );
        glTexImage2D( GL_TEXTURE_2D, //rodzaj tworzonej tekstury (1, 2 czy 3-wymiarowa)
        0, //poziom mipmapy
        GL_RGBA, //wewnêtrzny format danych tekstury
        Tekstura->sizeX, //szerokoœæ obrazu tekstury
        Tekstura->sizeY, //wysokoœæ obrazu tekstury
        0, //iloœæ pikseli ramki
        GL_RGBA, //format koloru
        GL_UNSIGNED_BYTE, //format danych reprezentuj¹cych piksel
        dane1 ); //bufor danych tekstury
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
       
    }
    delete[] dane1;
}
P-83147
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-05-17 14:01:18
W oczekiwaniu na odpowiedź nasunęło mi się rozwiazanie... Rozwiazaniem tego problemu jest dodanie do kodu funkcji tego kodu:
C/C++
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
Tak że problem rozwiazany!!!
P-83148
« 1 »
  Strona 1 z 1