Zaraz znów podniosę grafikę komputerową do projektu uniwersyteckiego. W poprzednim projekcie korzystałem z biblioteki o nazwie FTGL, która nie pozostawiła mnie do końca zadowolonego, ponieważ wydawało mi się to trochę ciężkie (próbowałem wielu technik renderowania, renderowanie tekstu nie skalowało się zbyt dobrze).
Moje pytanie brzmi, czy jest do tego dobra i wydajna biblioteka? Jeśli nie, w jaki sposób można wdrożyć szybki, ale ładnie wyglądający tekst? Niektóre zamierzone zastosowania to:
- Pływające etykiety obiektów / znaków
- Dialogi
- Menu
- HUD
EDYCJA: Najlepiej może również ładować czcionki
Odpowiedzi:
Popularnym frameworkiem jest GUI Crazy Eddie .
Ale choć jest to atrakcyjne, nie jest niczym niezwykłym, aby rzucić własne (i być może żałuję, gdy zasięg wzrośnie później;))
To normalne, że masz glify na bitmapach, a następnie rysujesz je za pomocą OpenGL.
Czasami wyświetla się tekst przejściowy, który może pojawiać się tylko w przypadku kilku ramek. Wystarczy użyć GL_QUADS + glVertex. Ale dla każdej dużej ilości tekstu lub długiego czasu widoczności warto umieścić GL_QUADS w VBO - zauważyłem z tego dużą poprawę wydajności.
Oczywiście istnieje kwestia generowania potrzebnych glifów. Istnieją programy takie jak BMFont , których można użyć do tego. Lub może być konieczne bardziej skomplikowane renderowanie, np. Freetype na żądanie. Korzystam z bmfonta z moim własnym rendererem całkiem szczęśliwie, to bardzo łatwo wydedukować.
źródło
Istnieje wiele sposobów - w zależności od tego, czego chcesz ... Tak jak wszędzie, nie ma czegoś takiego jak „najlepsze rozwiązanie”. Która platforma jest Twoim celem? Jakiego języka używasz? Co dotyczy zmiany rozmiaru / obrotu tekstu - czy jest to konieczne? Czy musisz być w stanie renderować TrueTypeFonts? Co o Multilanguage / Unicode? Jak chcesz przechowywać swój tekst (które kodowanie itp.)?
W przeszłości używałem także FTGL, a także czystego freetype (http://www.freetype.org/ FTGL jest na tym oparty), różnego rodzaju czcionek bitmapowych, czcionek konturowych ... Teraz jestem uzależniony od bitmapy czcionki, ale to tylko moje osobiste preferencje. Ponieważ nie chcę już zajmować się różnymi zestawami znaków, kodowaniem itp. - a licencjonowanie bitmapfontów jest również łatwiejsze i tańsze niż w przypadku TrueTypeFonts. I jest użyteczny na każdej platformie, która może ładować obrazy. Używam po prostu quada w openGL i mapuję na nim część mojej tekstury. Druga strona to: rozmiar czcionki będzie się zmieniał tylko przy współczynniku około +/- 50%. Jeśli możesz z tym żyć, sugerowałbym użycie mapy bitowej.
Jeśli masz również do czynienia z różnymi kodowaniami / zestawami znaków, powinieneś znaleźć sposób na załadowanie i użycie TrueTypeFonts (np. Z freetype, przy użyciu innej biblioteki lub z własną implementacją) ...
Zobacz także różne tutoriale na ten temat:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Czcionki bitmapowe
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Czcionki konturowe
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Czcionki konturowe odwzorowane na teksturę
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 Czcionka tekstury 2D
Powodzenia!
źródło
Jeśli chcesz używać czcionek bitmapowych, nie możesz się pomylić z generatorem czcionek bitmapowych Angelcode: http://www.angelcode.com/products/bmfont/
Konwertuje czcionkę truetype na jedną lub więcej tekstur (z ładnie spakowanymi glifami) i generuje mały plik zawierający UV i odstępy (uważam, że wyjście XML jest szczególnie łatwe w obsłudze, a jakość danych odstępów jest ogólnie bardzo dobre, nawet bez prawdziwego kerningu)
źródło
Korzystam z bibliotek Seana Barreta do renderowania glifów truetype w OpenGL (stb_image, stb_truetype).
Projekt Recast / Detour używa tych bibliotek do stworzenia interfejsu użytkownika ( IMUI )
źródło
Rozważ QML . Jest to w pełni funkcjonalna biblioteka interfejsu użytkownika z łatwą w użyciu składnią. Z mojego doświadczenia wynika, że jego zestaw funkcji jest znacznie lepszy niż CEGUI, ma lepszą dokumentację, wsparcie i społeczność, ponieważ jego głównym celem są aplikacje komputerowe, a możliwość renderowania poza ekranem to po prostu bonus.
Plusy:
Cons:
źródło