Feladat
Modellező programokban gyakran előfordul, hogy külső fájlból vagy URL címről töltünk be adatot, mint például:
- textúra kép,
- 3D geometria és anyag,
- elmentett színtér objektum definíciók.
Emlékeztető: A webböngészők tiltják, hogy a weboldalunk hozzáférjen a lokális fájlrendszerhez, ezért mindenképpen webszerveren keresztül kell ezt intéznünk. Vagy be kell állítanunk sajátot, vagy a WebStrom-ból indítva eleve webszerveren keresztül indul a programunk. További technikai információk a korábbi anyagrészben találhatók.
Az általános megközelítés az, hogy a betöltés aszinkron módon történik, vagyis a betöltés elindítása után a függvény rögtön visszatér, a programunk futása folytatódik. A probléma az, hogy az erőforrás ekkor még nem áll rendelkezésre! A betöltés végeztével egy visszahívható (callback) függvény aktiválódik, amiben reagálni tudunk erre az eseményre, például hozzáadjuk a betöltött objektumot a színtérhez, hozzárendeljük a betöltött textúra képet az anyag objektumhoz, stb. A kezelésre többfelé megközelítés is lehetséges.
- Az animáló/renderelő részben figyeljük, hogy mely objektumok érhetők már el, és csak ezeket használjuk fel. A betöltés előrehaladtával egyre több objektum jelenik meg. Ez az ellenőrzés plusz kódot jelent, valamint a modellezési élmény is fura lesz, így ez ritkán jó megoldás.
- A programunk elején elvégezzük a betöltést, és amikor minden elem rendelkezésre áll, akkor indítjuk el a modellezést. Ebben az esetben figyelnünk kell arra, hogy ha a folyamat időigényes, akkor tájékoztassuk a felhasználót erről, illetve az előrehaladás folyamatáról.
- Ha több erőforrás betöltésére is szükség van, akkor kezelni kell, hogy mindegyik betöltődjön a modellezés indítása előtt. Itt a probléma az, hogy a betöltés nem feltétlenül a hívás sorrendjében fog elvégződni! Ezt külön kezelni kell. A Three.js biztosít erre a feladatra betöltés kezelő (LoadingManager) objektumot, amit lentebb ismertetünk.