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

wyszukiwanie z zastosowanie map + vector wolniejsze od tablicy?

Ostatnio zmodyfikowano 2015-09-01 19:52
Autor Wiadomość
fokusx
Temat założony przez niniejszego użytkownika
wyszukiwanie z zastosowanie map + vector wolniejsze od tablicy?
» 2015-09-01 19:09:49
Przy zastosowaniu kontenera "map" oraz "vector" funkcja wyszukująca odpowiednią klatkę animacji szkieletowej strasznie wolno działa, zaś przy zastosowaniu tablicy ten czas zmniejszył się niemalże do 0, dlaczego?

Fragment kodu ogldev (z użyciem tablic):
C/C++
uint SkinnedMesh::FindPosition( float AnimationTime, const aiNodeAnim * pNodeAnim )
{
    for( uint i = 0; i < pNodeAnim->mNumPositionKeys - 1; i++ ) {
        if( AnimationTime <( float ) pNodeAnim->mPositionKeys[ i + 1 ].mTime ) {
            return i;
        }
    }
    assert( 0 );
   
    return 0;
}

mPositionKeys - to tablica struktur opisujących klatki animacji (czas klatki, wektor danych itd.).

Mój fragment kodu:
C/C++
unsigned int Animation::FindPosition( float AnimationTime, string NodeName )
{
    assert( Animation::Channels[ NodeName ].NumPositionKeys > 0 );
   
    for( unsigned i = 0; i < Animation::Channels[ NodeName ].NumPositionKeys - 1; i++ )
    if( Animation::Channels[ NodeName ].PositionKeys[ i + 1 ].Time > AnimationTime )
         return i;
   
    assert( 0 );
    return 0;
}

Channels - to mapa
C/C++
std::map < std::string, Channel > Channels;
która opisuje klatki dla pojedyńczego Node'a - w fragmencie ogldev jest to wszystko zawarte w klasie Node (pNodeAnim).

PositionKeys - to vector przechowujący wszystkie klatki (czas, wektor danych etc.) przypisane konkretnemu Node'owi.

Przez ten fragment kodu FPS'y spadły z 60 do 3-17.
Nie mam za bardzo pomysłu jak zmienić kod, by działał jak należy bez większych zmian, dlatego najpierw wolałbym upewnić się, że następnym razem wyjdzie to w porządku.

Mógłby ktoś mi to wyjaśnić?
P-137124
pekfos
» 2015-09-01 19:37:42
Zapisz wynik Channels[ NodeName ] w zmiennej, zamiast obliczać go przy każdej możliwej okazji.
P-137125
fokusx
Temat założony przez niniejszego użytkownika
» 2015-09-01 19:52:48
Ok, dzięki - już jest dużo lepiej.
P-137126
« 1 »
  Strona 1 z 1