2008-05-22

Pakowanie tekstur, geometrii, fonty i zarządzanie sceną - z grubsza zrobione.

Na wstępie wyjaśnię, że pod pojęciem pakowanie mam na myśli batching (chyba, w razie czego na końcu czeka refactoring ;)). Tak oto doprowadziłem do sensownego stanu te cztery wymienione w tytule rzeczy.

Od ostatniego postu przechodziłem też pewne problemy z NetBeansem, ale teraz wszystko jest już super (użytkownikom wcześniejszych wersji NB polecam upgrade do 6.1). Na dobrą sprawę poświęciłem jakieś 3-4 dni na kodowanie.

Pakowanie tekstur zrobiłem na podstawie artykułu o pakowaniu lightmap a po prawej widać moje wyniki. W lewym górnym rogu na ciemnoniebieskim tle widać teksturę czcionki tahoma o wielkości 18 pikseli zapakowaną na teksturze 256x128. Rendering czcionki sponsorowany jest przez bibliotekę FreeType ;). Na środku wypisany jest tekst. W lewym dolnym rogu można zaobserwować działanie zarządzania sceną - do litery 'F' doczepiony został znak '@'. Zobrazować może to też testowy kod wewnątrz menadżera sceny

// Litera 'F'
Entity *ent = createEntity();
ent->setMaterial(
    &Core::device()->font->Glyphs[70-Font::FIRST_CHAR]->mImage);
SceneNode *node1 = rootSceneNode()->createChild();
node1->setPosition(-320, -256);
node1->setRotation(1);
node1->attachObject(ent);

// Znak '@'
Entity *ent2 = createEntity();
ent2->setMaterial(
    &Core::device()->font->Glyphs[64-Font::FIRST_CHAR]->mImage);
SceneNode *node2 = node1->createChild();
node2->setPosition(100, 0);
node2->attachObject(ent2);

Oczywiście dostęp do znaków czcionki zostanie ograniczony. Testowo zrobiłem tak, ponieważ jeszcze nie mam zarządzania zasobami, ani nawet wczytywania grafiki.

Aktualnie będę pracował nad zarządzaniem zasobami i dopracuję interface pakowania tekstur, no i standardowo szlifowanie całości i dopieszczanie. Niestety zbliża mi się sesja, więc zmniejsza się ilość czasu jaką mogę poświęcić na kodowanie.

Jeśli ktoś chce zobaczyć bardziej jak to wygląda od strony kodu to może zajrzeć na SVN-a na sf.net. Jestem świadom średniej jakości mojego kodu, ale jest to po prostu bardzo wczesna wersja.