Megosztás a következőn keresztül:


Újraszerkesítési műveletek

A World Locking Tools refit műveletei akkor történnek, amikor a rendszer megállapítja, hogy a jelenet egyes objektumainak áthelyezése jobb lenne, ha regisztrálná ezeket az objektumokat a fizikai világ horgonyaival.

Ez a szakasz megpróbál további betekintést adni az újrabeépítési műveletekhez vezető helyzetekbe, valamint maguk a műveletek mechanikájába.

Fontos hangsúlyozni, hogy a refit műveletek ritkán fordulnak elő. Az újrafagyasztási műveletet kiváltó alapértelmezett hibatűréseket az alkalmazás testre szabja, de a vegyes valósági környezetek általában csak rendkívüli körülmények között aktiválják az újrafagyasztási műveleteket. Azok a feltételek, amelyek hozzájárulhatnak az újrafagyasztás szükségességéhez, a következők:

  • A rossz környezet miatti nyomkövetési veszteség.
  • A környezetvizsgálatot befolyásoló fej gyors mozgása.
  • Dinamikus környezetek.
  • Huroklezárás (azaz nyomon követési hibák halmozása egy korábban meglátogatott helyre visszavezető körforgalom útvonalán).

Ezeknek a problémáknak a kiváltó oka a rossz nyomon követés – más szóval a nyomkövetési hibák. Az ésszerű környezetek ésszerűen jó nyomon követést eredményeznek, és különösen a hely kezdeti vizsgálata után az újraszerelési műveletek rendkívül ritkák lesznek.

Töredék egyesítés

Számos feltétel több töredék meglétéhez vezethet, a leggyakoribb ok a nyomon követés ideiglenes elvesztése. A töredékek olyan objektumok gyűjteményei, amelyek közös koordináta-területet osztanak meg, de ahol az egyik töredék koordinátaterülete meghatározhatatlanul egy másik töredékhez viszonyítva található.

Ha elegendő új érzékelőadat érkezik és dolgoz fel, hogy két, korábban nem kapcsolódó töredék tartalma megfelelően helyezhető el egymáshoz viszonyítva ugyanabban a térben, el lehet végezni a töredékegyesítést.

Az új koordináta-tér, amelybe a két (vagy több) töredék tartalma egyesül, tetszőleges. Itt említjük meg, hogy a végső koordináta-tér az egyik szóközé lesz, ami csak azért fontos, mert azt jelenti, hogy az összes egyesítendő töredéknek, kivéve egyet, a céltöredéket, módosítania kell a koordinátáikat. Az egyesítés végső céljaként kiválasztott töredék tartalma nem változik.

A rendszer kiszámítja a kiigazítási átalakítást az egyesítendő forrástöredékek mindegyikéhez. A kiigazítási átalakítással meghívja a töredékek minden egyes mellékletpontjához tartozó AdjustLocationDelegate-et. A céltöredékben lévő mellékletpontokat a rendszer nem érinti, és az AdjustLocationDelegate-eket sem hívja meg.

A töredékek leírásában egy sötét folyosós forgatókönyv által összekapcsolt két szoba egy ilyen helyzet példája. A kezdeti fázisban mindkét töredék (helyiség) vizsgálata megtörtént, de a két töredék relatív helyzetéről nem áll rendelkezésre információ. Tehát az a koordinátarendszer, amelyben az egyes töredékek tartalma elhelyezve van, tetszőleges, feltéve, hogy állandó az adott helyiség összes objektumában. Előfordulhat például, hogy az egyes helyiségek tartalma egy koordinátarendszerben található, amelynek eredete a helyiség délnyugati sarkában található. Az ugyanabban a töredékben lévő két objektum koordinátái a két objektum egymáshoz viszonyított pozícióját jelzik, de a két különböző töredékben lévő két objektum koordinátái nem árulnak el semmit a relatív pozíciójukról.

Ha több információra van szükség, akkor lehetőség van a második töredék tartalmának koordinátáinak módosítására, hogy a tartalmának koordinátái az első töredék objektumaihoz képest értelmezhetők legyenek. Előfordulhat például, hogy a folyosó fénye be van kapcsolva, és bejárja a folyosót, áthidalva a két darab közötti rést. Ha a két helyiségben lévő összes objektum koordinátái ugyanabban a konzisztens koordináta-térben vannak beállítva, már nincs valódi különbség a két töredék között, így a tartalmuk mind egyetlen közös töredékhez tartozik.

Több töredék egyetlen töredékbe való összecsukásának művelete egy egyesítési művelet.

Itt fontos megjegyezni, hogy a világzárt térben a jelenetben elhelyezett normál Unity-objektumok esetében az egyesítési műveletnek nincs hatása. Az objektumok áthelyezése az újraszerelési műveletekből csak a mellékletpontokon keresztül történik.

Műveletek újrafagyasztása

Egy másik helyzet, amely akkor merül fel, amikor a horgonyok pozíciói idővel finomulnak. Nyilvánvalóvá válik, hogy a rotációs/eltolásos átalakítás már nem megfelelő a kezdeti durva horgonypozíciók és a fizikai világ frissebb továbbfejlesztett pozíciói közötti különbség kompenzálásához. Ne feledje, hogy maguk a horgonyok folyamatosan mozognak egymáshoz képest a szórványos térben. Az ezekből a horgonyokból származó rögzítési pontok azonban világzárolt térben vannak rögzítve.

Amikor a rendszer felismeri, hogy az általa kezelt mellékletpontok jobban regisztrálhatók a fizikai világban a horgonypozíciók frissítései miatt, akkor egy másik lehetőség van egy korrekciós eseményre. A rögzítési pontok új érzékelőadatoknak megfelelő beállítását refreeze műveletnek nevezzük. Míg az egyesítési művelet során a töredék tartalmát egyetlen átalakítással igazítják, hogy két töredék koordináta-tereit egyetlen egységes térbe egyesítsük, a feloldás egyenként módosítja az egyes mellékletpontokat az azt befolyásoló horgonyok frissített pozíciói alapján.

Az egyesítési művelethez hasonlóan minden mellékletpont az AdjustLocationDelegate használatával értesül a kiszámított kiigazítási átalakításról.

Ha a feltételek megfelelőek, az újrafagyasztás egyesítési műveletet is végrehajthat. Ez az egyesítés az újrafagyasztás implicit része lesz: Az egyesítéshez nem jön létre külön esemény, és az újrafagyasztás részeként végrehajtott kiigazítási átalakítás magában foglalja mind a horgony mozgása miatti egyéni módosítást, mind az egyesítés miatti töredékbeállítást.

Reagálás az események újrafelszerelésére

Egyesítés vagy újrafagyasztás esetén az események újrafelszerelésére vonatkozó reakció az alkalmazáson múlik. Pontosabban a mellékletpont-kezelőkön múlik, mivel a különböző objektumtípusok eltérően reagálhatnak. A csatolási pont által befolyásolt objektumokat általában a beállításátalakítás mozgatja a GameObject.transform használatával. A mozgást ehelyett más mechanizmus, például a csúcspontok manuális mozgatása hajthatja végre. Egyes alkalmazások számára előnyös lehet az egyesítés által érintett objektumok elvetése és az új létrehozási ciklus megkezdése.

A lényeg az, hogy a World Locking Tools nem függ attól, hogy az alkalmazás hogyan reagál az újraszerelési műveletekre. Ez teljes mértékben az alkalmazásfejlesztő igényein múlik.

Az értesítés és az újrafelszerelési műveletekre való reagálás elsődleges mechanizmusa a mellékletpont. Ebben a cikkben további részleteket és lehetőségeket ismertetünk.

Lásd még