Kiegészítő anyag!
Részletesen nem tárgyaljuk, a Three.js működésének jobb megértését célozza.
Részletesen nem tárgyaljuk, a Three.js működésének jobb megértését célozza.
Az általános objektum attribútumok vizsgálatához visszakanyarodunk a térbeli modellezés példaprogramhoz (02_01_ThreeJsCubeTransformCommon). Figyeljük meg a következőket.
Kiindulópont
Az objektum saját koordináta-rendszere és a világ koordináta-rendszer egybeesik, az objektum csúcspontjai a definíciókori helyükön jelennek meg.
Skálázás
A csúcspontok X, Y és Z koordinátái szorzódnak a skálaparaméterekkel. A tengelyirányok nem változnak, továbbra is egybeesnek.
Forgatás
Eltolás
A geometria csúcspont koordinátái nem változnak a geometriai transzformációk hatására! A világ koordináta-rendszerben a végleges helyükre egy geometriai transzformáció segítségével kerülnek! A geometriai transzformáció lineáris, vagyis egy 4x4-es homogén reprezentációs mátrixszal megadható. A transzformációt a GPU hajtja végre a csúcspont koordinátákra.
A beállított objektum attribútumok határozzák meg a 4x4-es transzformációs mátrixokat, amelyek összeszorzásra kerülnek egy közös kompozíciós mátrixot kialakítva (object.matrix attribútum).
A transzformációs mátrixok szorzásának sorrendje rögzített: skálázás, forgatás, végül eltolás.
Az object.matrix számításához:
A rendszer minden objektumhoz nyilvántartja, hogy a világ koordináta-rendszerben hogyan helyezkedik el. Ez elérhető az object.matrixWorld attribútummal.
Amennyiben saját magunk számítjuk ki a transzformációs mátrixot, akkor mindenképpen állítsuk hamisra a matrixAutoUpdate kapcsolót, egyébként rendereléskor a Three.js felülírja!
A Three.js lehetőséget biztosít arra, hogy a geometriai transzformációt végrehajtsuk, a csúcspontok tényleges új értéket kapjanak. Ekkor figyelnünk kell az alábbiakra.
mesh.updateMatrix();
mesh.geometry.applyMatrix4( mesh.matrix );
mesh.geometry.verticesNeedUpdate = true;
mesh.position.set( 0, 0, 0 );
mesh.rotation.set( 0, 0, 0 );
mesh.scale.set( 1, 1, 1 );
mesh.updateMatrix();