2013-01-01 14 views
5

zacznę z obrazka:brzydki po zmianie rozmiaru czcionki, OpenGL

enter image description here

Powyższe zdjęcie przedstawia tekst osiągnąć na dwa różne sposoby, zarówno stosowany ten sam typ czcionki - Arial, pogrubienie, rozmiar 11

Ten na dole został utworzony w programie do edycji obrazu, a ten u góry w mojej aplikacji OpenGL. Aby być bardziej precyzyjnym, używając FTExtrudeFont z biblioteki FTGL:

font_ptr font(new FTExtrudeFont(filename.c_str())); 

Moje pytanie brzmi, dlaczego jest on sporządzony w taki sposób? Zakładam, że powodem mogą być różne algorytmy zmiany rozmiaru, ale jeśli tak, to w jaki sposób mogę uzyskać tę lepiej wyglądającą czcionkę (dolną) w mojej aplikacji OpenGL?

EDIT:

Aby renderowanie czcionek, mam dzwonić tylko tę jedną funkcję:

font->Render(text,   // Text to be displayed 
      -1,   // Line length, which by default is left as -1 
      pos);   // Position in which to draw text 
+0

Potrzebujesz wyciskanej czcionki? Czy możesz wypróbować normalną czcionkę wektorową lub czcionkę teksturowaną i sprawdzić, czy uzyskasz lepsze wyniki? – WildCrustacean

+0

@bde Próbowałem teksturowanej czcionki, ale jest antyaliasingiem, co w tym przypadku nie było dla mnie dobre, ponieważ potrzebuję ostrego, prawdziwego czarnego konturu. –

Odpowiedz

3

To wygląda jak coś, które byłyby spowodowane przez pobieranie próbek tekstur w OpenGL. Dzieje się tak, gdy tekstura, którą rysujesz (w tym przypadku czcionka) nie ma tego samego rozmiaru, co kwadrat, na którym ją narysujesz.

Łatwe rozwiązanie: upewnij się, że rozmiar tekstury odpowiada obszarowi narysowanemu na ekranie. Nie renderuj czcionki 14px do obszaru 12px, ale używaj czcionek 12px lub 14px.

W swoim pytaniu wspominasz, że twoja czcionka to "rozmiar 11". Nie znam szczegółów biblioteki FTGL, ale zakładam, że istnieje połączenie, które wskaże najlepsze wymiary dla określonego ciągu, który możesz narysować. Nie używaj swojej własnej matematyki, aby je obliczyć, skorzystaj z biblioteki. Dopóki masz odpowiednie wymiary, problem, który masz, nie powinien się zdarzyć.

+0

Dziękuję za odpowiedź, ale myślę, że nie jestem w stanie tego zrobić, ponieważ jedyną funkcją, którą wołam do renderowania jest (to z biblioteki FTGL): czcionka-> Render (tekst, -1, pos); Nie sądzę, że mam jakikolwiek sposób na modyfikację obszaru renderowania. –

+0

Tak jak powiedziałem, nie wiem zbyt wiele na temat biblioteki FTGL, ale czy możliwe jest, że używasz niewłaściwych matryc modelview/projekcji, powodując, że transformacja z wierzchołków do pikseli nie działa? * Coś * powoduje próbkowanie tekstury/tekstur. –

+0

Nie mam pojęcia, w jaki sposób mogę faktycznie sprawdzić, czy używam "niewłaściwej matrycy widoku modelu", jak mówisz. Z tego, co widzę, wszystko inne wydaje się poprawne - używam również innych tekstur do rysowania tła komponentów GUI i są one wyświetlane poprawnie (mam na myśli, że piksele są we właściwych miejscach). –

Powiązane problemy