C++ SFML renderowanie textu
Ostatnio zmodyfikowano 2021-01-24 17:37
Grzegorz92 Temat założony przez niniejszego użytkownika |
C++ SFML renderowanie textu » 2021-01-23 19:31:51 Witam,
szukam pomocy jak zdenerwować text w sfmlu żeby był wyraźny, albo czego trzeba użyć jakieś pomysły, z góry dzięki
chodzi mi żeby nie było tak rozmazane - chce zrobić żeby był taki wyraźny jak po prawej stronie.
https://iv.pl/images/f24f55905e282a47d8976a7249485f71.jpg |
|
pekfos |
» 2021-01-23 21:01:13 To w ogóle ta sama czcionka? Na pewno rozmiar nie jest ten sam. Ustaw taki sam rozmiar znaku, nie ruszaj skalowania i jeśli pozycja tekstu jest zmienna, to używaj zawsze zaokrąglonych współrzędnych. |
|
Grzegorz92 Temat założony przez niniejszego użytkownika |
» 2021-01-24 07:24:09 Tak ta sama czcionka i ten sam rozmiar tylko na innych silnikach graficznych, po lewej moj sfml po prawej directdraw. Chodzi o to jak wyłączyć anty aliasing bo sfml ustawia go automatycznie dla textu i go wygładza |
|
pekfos |
» 2021-01-24 12:36:21 Wygładzanie tekstu jest pożądanym zachowaniem i SFML nie daje możliwości wyłączenia go. Możesz dodać taką funkcjonalność samemu z użyciem FT_RENDER_MODE_MONO i paroma innymi zmianami. Mój patch Font.cpp względem SFML 2.5.1 poniżej, ale docelowo raczej chcesz mieć na to parametr. Index: Font.cpp =================================================================== --- Font.cpp (revision 6059) +++ Font.cpp (working copy) @@ -544,7 +544,7 @@ return glyph; // Load the glyph corresponding to the code point - FT_Int32 flags = FT_LOAD_TARGET_NORMAL | FT_LOAD_FORCE_AUTOHINT; + FT_Int32 flags = FT_LOAD_TARGET_MONO; if (outlineThickness != 0) flags |= FT_LOAD_NO_BITMAP; if (FT_Load_Char(face, codePoint, flags) != 0) @@ -576,7 +576,7 @@ } // Convert the glyph to a bitmap (i.e. rasterize it) - FT_Glyph_To_Bitmap(&glyphDesc, FT_RENDER_MODE_NORMAL, 0, 1); + FT_Glyph_To_Bitmap(&glyphDesc, FT_RENDER_MODE_MONO, 0, 1); FT_Bitmap& bitmap = reinterpret_cast<FT_BitmapGlyph>(glyphDesc)->bitmap; // Apply bold if necessary -- fallback technique using bitmap (lower quality) @@ -727,7 +727,7 @@ // Make the texture 2 times bigger Texture newTexture; newTexture.create(textureWidth * 2, textureHeight * 2); - newTexture.setSmooth(true); + newTexture.setSmooth(false); newTexture.update(page.texture); page.texture.swap(newTexture); } @@ -811,7 +811,7 @@ // Create the texture texture.loadFromImage(image); - texture.setSmooth(true); + texture.setSmooth(false); } } // namespace sf
Później i tak trzeba jeszcze wyświetlanie skalibrować przez dodanie ułamków pikseli do pozycji, by rasteryzacja zadziałała po naszej myśli. Osobiście nigdy bym nie szedł w tym kierunku. Używanie standardowych czcionek do napisów wielkości kilku pikseli w każdą stronę to overkill. Zamiast tego bym użył renderowania bitmap z OpenGL: Mapy bitowe |
|
Grzegorz92 Temat założony przez niniejszego użytkownika |
» 2021-01-24 16:29:00 no ale nie da sie wyswietlic textu z opengla w oknie sfml? no i ten kod co wyslales to trzeba przerabiac zródła sfml i pozniej kompilowac od nowa |
|
pekfos |
» 2021-01-24 17:37:31 no ale nie da sie wyswietlic textu z opengla w oknie sfml? Okno SFML to jest okno OpenGL. no i ten kod co wyslales to trzeba przerabiac zródła sfml i pozniej kompilowac od nowa To pytanie? Tak. SFML obecnie nie pokrywa przypadku bardzo małych napisów renderowanych z dokładnością do piksela. |
|
« 1 » |