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

C++ SFML renderowanie textu

Ostatnio zmodyfikowano 2021-01-24 17:37
Autor Wiadomość
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
P-177992
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.
P-177993
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
P-177995
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: » Biblioteki C++» Kurs OpenGL, C++Mapy bitowe lekcja
P-177997
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
P-178005
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.
P-178006
« 1 »
  Strona 1 z 1