Tank példaprogram
Színtér gráf felépítése
A színtérhez 5 objektumot adunk hozzá. 3 fényforrást, 1 talaj geometriát és egy objektum csoportot, ami a tankot reprezentálja.
Az ambiens fénynek nincs térbeli elhelyezkedése és mozgást sem tud végezni.
A két pontfény forrást térben helyezzük el, mozgást nem végeznek.
A talajt reprezentáló téglalap az XY síkon generálódik. A talaj nekünk az XZ síkon kell legyen, ezért elforgatjuk 90 fokkal.
A tankot összefogó csoportnak háromféle transzformációt állítunk be, ezek minden alkotórészre érvényesülnek. A csoport objektumot a THREE.Group-ból hozzuk létre.
- Skálázás: a téglatest paraméterek túl kicsi modellt adnak, így minden irányban kétszeresre növeljük a méretet.
- A Z-tengely menti elhelyezkedés a tank pozíciója, előre hátra mozgást tesz lehetővé, amit a panelről vezérelhetünk.
- Az Y-tengely menti eltolásra azért van szükség, mert alapértelmezésként a tank alapjának középpontja kerül az origóba, vagyis a szintén origón átmenő talaj objektum félbe metszi. Az alap téglatest magasság felével ezért felfelé kell mozdítani. Vegyük észre, hogy az alap téglatest mérete a skálázás miatt duplájára nőtt, így annak a fele pontosan a téglatest objektum konstruktorának átadott Y koordinátával egyezik meg.
A tank alsó része (mesh1) a csoporttól örököltön túl más mozgást nem végez.
A felső forgó rész (mesh2) forog az Y-tengely körül a panelen megadott érték szerint. Emellett az Y-tengely mentén el kell mozgatnunk, hogy az alsó lapja a tank alapjának felső lapjával essen egybe.
Az ágyúcső a felső forgó részhez csatolódik. Mivel elforgatni az egyik oldallapjának középvonala körül kell, ezért két részből rakjuk össze.
- A holder3 egy láthatatlan objektum, ez végzi a cső emelését, valamint elhelyezi a felső forgó rész első lapjához.
- A mesh3 adja a téglatest geometriát, valamint itt kell gondoskodnunk arról, hogy a szülőtől örökölt forgatás a hátsó lap középtengelye körül érvényesüljön. Ezt az ágyúcső hosszának felével történő, Z-tengely menti eltolással érjük el.
Megjegyezzük, hogy a mesh2 objektumot a mesh1-hez is hozzáadhatjuk, ebben az esetben nincs szükség a tankGroup objektumra sem.
Object3D vagy Group?
Az Object3D és a Group használat szempontjából gyakorlatilag megegyeznek. Egyetlen különbség, hogy az osztályuk más lesz. Ezt felhasználhatjuk például a színtér gráf bejárásakor az objektum típusok detektálásánál.
A Group szemantikailag azt jelzi, hogy több látható geometria kapcsolódik össze egy egységgé, míg az Object3D jelezheti, hogy egy objektum összetett mozgását valósítjuk meg, ami több lépésben lehetséges csak. Átláthatóbb a kód, ha ezt az irányelvet követjük.