Savail Temat założony przez niniejszego użytkownika |
Problem z przezroczystoscia tla w tworzeniu tekstu (Opengl SDL, SDL_ttf) » 2010-12-18 18:03:07 Witam Uzywam Opengl i SDL. Stosuje w swoim programie: glEnable( GL_ALPHA_TEST ); glAlphaFunc( GL_GEQUAL, 0.5 ); i wszystko ladnie sie wyswietla oprocz tekstu ktory generuje przy pomocy SDL_ttf: 1)Tworze bitmape z poczatkowym tlem(przy wyswietlaniu ma byc przezroczyste), 2)tworze tekst, 3)blituje tekst na bitmape 4)Za pomoca quadow wyswietlam i wyglada na to ze calosc jest uznawana jako kanal alpha bo nic sie nie wyswietla. Gdy usune jednak glAlphaFunc wyswietla sie tekst ale razem z tlem. Pytanie: Jak usunac kanal alpha z tekstu(a na tle zostawic), lub jak rozwiazac taki problem w inny sposob? Funkcja tworzaca tekst: void ClassProgram::LoadFont( std::string font_name, int font_size, std::string text, int pos_x, int pos_y, Uint8 r, Uint8 g, Uint8 b ) { if( TTF_Init() == - 1 ) exit( 0 ); SDL_Surface * message = NULL; SDL_Surface * background = NULL; TTF_Font * font = NULL; GLuint texture; SDL_Color fontcolor = { r, g, b }; font = TTF_OpenFont( font_name.c_str(), font_size ); message = TTF_RenderText_Blended( font, text.c_str(), fontcolor ); int w = 256; int h = 64; background = SDL_CreateRGBSurface( 0, w, h, 32, 0, 0, 0, 0 ); SDL_BlitSurface( message, 0, background, 0 ); glGenTextures( 1, & texture ); glBindTexture( GL_TEXTURE_2D, texture ); glTexImage2D( GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, background->pixels ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glBindTexture( GL_TEXTURE_2D, texture ); glColor3f( 1, 1, 1 ); glBegin( GL_QUADS ); glTexCoord2f( 0.0f, 1.0f ); glVertex2f( pos_x, pos_y ); glTexCoord2f( 1.0f, 1.0f ); glVertex2f( pos_x + w, pos_y ); glTexCoord2f( 1.0f, 0.0f ); glVertex2f( pos_x + w, pos_y + h ); glTexCoord2f( 0.0f, 0.0f ); glVertex2f( pos_x, pos_y + h ); glEnd(); glFinish(); SDL_FreeSurface( message ); SDL_FreeSurface( background ); TTF_CloseFont( font ); TTF_Quit(); }
|
|
DejaVu |
» 2010-12-20 00:24:51 1. Czy aby napewno dobre wartości przekazujesz do funkcji glAlphaFunc()?
2. Czy Twoja tekstura z tekstem czy czymkolwiek innym posiada kanał alfa? |
|
Savail Temat założony przez niniejszego użytkownika |
» 2010-12-20 14:05:10 tekstura z tekstem ma model RGBA wiec posiada kanal alpha W glAlphaFunc()zaden parametr nie daje mi w tej chwili oczekiwanego rezultatu ;((czcionka bez tla) |
|
DejaVu |
» 2010-12-20 18:51:11 A próbowałeś wykorzystać tą teksturę z przeźroczystością po prostu na powierzchni? Może jednak nie włączyłeś odpowiednich flag do obsługi przeźroczystości? |
|
Savail Temat założony przez niniejszego użytkownika |
» 2010-12-22 18:35:08 hej sorry ze tak dlugo nie odpowiadalem ale nie mialem za duzo czasu. Problemu udalo mi sie rozwiazac stosujac blending zamiast glAlphaFunc(): glEnable( GL_BLEND ); glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); |
|
« 1 » |