[ DjoleReject @ 28.03.2009. 13:17 ] @
Posto sam na istom ovom mestu pre nekog vremena trazio font, sad bi bilo lepo da okacim ovaj sto sam napravio. Slobodni ste da ga koristite kako god hocete, a naravno i pozeljna je kritika stvari koje ne valjaju.
Inace, nisam ga planirao za druge, pa je malo specificno napravljen za moje potrebe, ali cini mi se da nekome ko razume o cemu se radi nije tesko da ga prepravi u bilo sta zgodno. Znam da bi meni znacilo da sam imao ovako nesto i da nisam morao da se bakcem sa pravljenjem fonta, pa sam ga zato i okacio. Valjda ce nekome valjati.

Kratko uputstvo:
- Tekstura u kojoj je nacrtan sam font se nalazi u objektu koji se kod mene zove texman, tipa TextureManager. Pretpostavljam da svako ima neki svoj nacin da cuva teksture, pa neka to ispravi u nesto sto mu odgovara. Kada u konstruktoru uzimam fntID, to je u stvari ID koji ta tekstura fonta ima u TextureManager-u i preko koje se tekstura dobija. Ako zelite, lako ce vam biti da prepravite to u privatnu teksturu unutar same klase BmpFont. U tom slucaju bi se konstruktoru slao path do fajla i ucitavala tekstura funkcijom D3DXCreateTextureFromFile.

- U funkciji render promenite texman->TEX(fntID) u teksturu koja kod vas cuva sliku celog fonta. Takodje u funkciji loadFromFile() cete na kraju primetiti neki iskomentarisan kod koji je meni sluzio da odredim ID teksture u kojoj je font, a vi na tom mestu iskoristite texFntPath jer je u tom wstringu ime fajla. Ukoliko cuvate teksturu fonta kao lokalnu teksturu, onda bih predlozio da je odmah na ovom mestu napravite. Odkomentarisite samo deo koji sam stavio za takve potrebe.

- Sve ovo radi sa fontovima koje pravi BMFont (http://www.angelcode.com/). Kad ga instalirate, lako cete provaliti kako se pravi font. Rezultat toga je jedan .fnt i jedan .png fajl (moze i targa).

- folderPath i definitionPath su putanje do foldera gde se fontovi cuvaju i ime samog .fnt fajla. Dva broja na kraju liste parametara koji dolaze u konstruktor su sirina i visina teksture u koju ce se pisati.

- BmpFont pravi svoju teksturu u koju crta slova. Ukoliko zelite da se pise po nekoj teksturi koja se nalazi negde drugde, najlakse ce vam biti da napravite funkciju koja dobija teksturu i onda je stavi na mesto lokalne.

- Mozete pisati std::string i std::wstring. string se na kraju pretvori u wstring, tako da vam tu nema ustede. Funkcije print koje to rade se ponasaju kao stara dobra printf funkcija, znaci mozete vasem fontu da naredite sledece:
fnt->print("Stoku tera Raca.\n%dku Raca\t%d kuraca...", 100, 100);
ili sledece:
fnt->print(L"Ćirilica je bolja %d puta. %s", 100, L"Ali je es ne podrzava :( ");

- pisanje se obavlja tako sto kazete print("nesto"), pa posle iscrtate tu teksturu na kojoj je to napisano gde god zelite funkcijom TEX(). Naravno, pre samog pisanja, mozete resajzovati teksturu funkcijom resizeWritingArea(int x, int y), a nije zgoreg ni turiti bordere koji odedjuju po kolikom komadu teksture se zapravo pise (mada najcesce nema potrebe za prozirne teksture).

-Ja imam klasu logger koja se brine o pisanju raznih gluposti u fajl. Promenite to.
- Isto tako NOT_SET mi je u stvari obican broj -99 kojim dajem sebi do znanja da nesto ne valja. Predlazem da u header ubacite:
enum{
NOT_SET = -99
};

Ako jos nesto nije jasno oko koriscenja ove klase - pitajte. Takodje, ako mislite da je nesto moglo bolje da se uradi ili da uopste ne valja - recite.