Skip navigation

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 ment 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.