Przemieszczanie obiektów (węzeł Transform)

Obiekt definiowany w poprzednim punkcie naszego kursu swój środek miał w punkcie (0, 0, 0) trójwymiarowego układu współrzędnych. Z pewnością jednak będziecie chcieli mieć możliwość przesunięcia naszego obiektu, lub też zdefiniowania drugiego obiektu w innym miejscu sceny trójwymiarowej. Może zechcecie nawet dany obiekt obrócić lub wręcz poddać go skalowaniu. Wszystkie tego typu problemy rozwiązujemy przez zastosowanie węzła Transform. Jego interfejs wygląda następująco:
 

Transform { 
  eventIn      MFNode      addChildren
  eventIn      MFNode      removeChildren
  exposedField SFVec3f     center           0 0 0 
  exposedField MFNode      children         []
  exposedField SFRotation  rotation         0 0 1 0 
  exposedField SFVec3f     scale            1 1 1 
  exposedField SFRotation  scaleOrientation 0 0 1 0
  exposedField SFVec3f     translation      0 0 0 
  field        SFVec3f     bboxCenter       0 0 0 
  field        SFVec3f     bboxSize         -1 -1 -1
} 
 

Węzeł Transform jest węzłem grupującym. Węzły tego typu służą do tworzenia przekształceń obiektów lub grup obiektów na scenie. Obiekty, które mają ulec przekształceniom umieszczane są w polu children węzła grupującego. Każde zastosowanie węzła Transform powoduje utworzenie nowego układu współrzędnych, których w naszym świecie możemy zdefiniować dowolną liczbę.

Pole center określa położenie środka naszego układu współrzędnych w stosunku lokalnego układu współrzędnych, czyli punktu (0,0,0). Pole center jest polem typu SFVec3f. W polu rotation możemy zdefiniować obrót obiektu w układzie współrzędnym, jest to pole typu SFRotation. Pole scale o typie SFVec3f określa skalowanie utworzonego przez nas układu współrzędnych. Wartości w tym polu powinny być > 0.0. Natomiast pole scaleOrientation odpowiada za obrót układu współrzędnych przed skalowaniem w celu określenia kierunku skalowania. Pole translation definiuje przesunięcie danego obiektu względem środka układu współrzędnych utworzonego przez zastosowanie węzła Transform. Spójrzmy na przykład Trans.wrl:

#VRML V2.0 utf8

Transform {
    rotation    1 0 0 0.5
    translation 0 0 -5
    children [
            Shape {
                appearance NULL
                geometry Box {       
                     size 4 4 4
                }
            }
    ]
}

W powyższym przykładzie sześcian, który stworzyliśmy poprzednio, korzystając z węzła Transform, przemieszczony został względem układu współrzędnych. Nasz sześcian został obrócony względem osi X o kąt 0.5 radiana i przesunięty po ujemnej stronie osi Z o wartość 5 (metrów).