Motivation
- By default, all shapes are built at the center of the world
 - A Transform enables you to
- Position shapes
 - Rotate shapes
 - Scale shapes
 
 
Using coordinate systems
- An X3D file builds components for a world
 - A file’s world components are built in the file’s world coordinate system
 - By default, all shapes are built at the origin of the world coordinate system
 
A transform creates a coordinate system that is
relative to a parent coordinate system
Shapes built in the new coordinate system are positioned, rotated, and scaled along with it
The Transform group node creates a group with its own coordinate system
- translation - position
 - rotation - orientation
 - scale - size
 - children - shapes to build
 
XML Encoding
1
2
3
4
5
6
  | <Transform
    translation='...'
    rotation='...'
    scale='...'>
  <!-- children -->
</Transform>
 | 
Classic VRML Encoding
1
2
3
4
5
6
  | Transform {
  translation ...
  rotation ...
  scale ...
  children [ ... ]
}
 | 
Including children
The children field includes a list of one or more nodes
XML Encoding
1
2
3
4
5
6
7
  | <Transform ...>
    <Shape><!-- ... --></Shape>
    <Shape><!-- ... --></Shape>
    <Transform><!-- ... --></Transform>
    <!-- # And other child nodes -->
    <!-- ... -->
</Transform>
 | 
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
10
  | Transform {
  ...
  children [
    Shape { ... }
    Shape { ... }
    Transform { ... }
    # And other child nodes
    ...
  ]
}
 | 
Translating
Translation positions a coordinate system in X, Y, and Z.
XML Encoding
1
2
3
4
5
  | <!-- X Y Z -->
<Transform
    translation='2.0 0.0 0.0'>
  <!-- children ... -->
</Transform>
 | 
Classic VRML Encoding
1
2
3
4
5
  | Transform {
  # X Y Z
  translation 2.0 0.0 0.0
  children [ ... ]
}
 | 
Rotating
Rotation orients a coordinate system about a rotation axis by a rotation angle
- Angles are measured in radians
 - radians = degrees / 180.0 * 3.1415927
 
XML Encoding
1
2
3
4
5
  | <!-- X Y Z Angle -->
<Transform
    rotation='0.0 0.0 1.0 0.52'>
  <!-- children ... -->
</Transform>
 | 
Classic VRML Encoding
1
2
3
4
5
  | Transform {
  # X Y Z Angle
  rotation 0.0 0.0 1.0 0.52
  children [ ... ]
}
 | 
Specifying rotation axes
- A rotation axis defines a pole to rotate around
 - Like the Earth’s North-South pole
 
Typical rotations are about the X, Y, or Z axes:
| Rotate about | Axis | 
|---|
| X-Axis | 1.0 0.0 0.0 | 
| Y-Axis | 0.0 1.0 0.0 | 
| Z-Axis | 0.0 0.0 1.0 | 
Using the Right-Hand Rule
Positive rotations are counter-clockwise
To help remember positive and negative rotation directions:
- Open your hand
 - Stick out your thumb
 - Aim your thumb in an axis positive direction
 - Curl your fingers around the axis
 - The curl direction is a positive rotation
 
Scaling
Scale grows or shrinks a coordinate system by a scaling factor in X, Y, and Z.
XML Encoding
1
2
3
4
5
  | <!-- X Y Z  -->
<Transform
  scale='0.5 0.5 0.5'>
  <!-- children ... -->
</Transform>
  | 
Classic VRML Encoding
1
2
3
4
5
  | Transform {
  # X Y Z
  scale 0.5 0.5 0.5
  children [ ... ]
}
 | 
Scaling, rotating, and translating
Scale, Rotate, and Translate a coordinate system, one after the other.
XML Encoding
1
2
3
4
5
6
  | <Transform
    translation='2.0 0.0 0.0'
    rotation='0.0 0.0 1.0 0.52'
    scale='0.5 0.5 0.5'>
  <!-- children ... -->
</Transform>
 | 
Classic VRML Encoding
1
2
3
4
5
6
  | Transform {
  translation 2.0 0.0 0.0
  rotation 0.0 0.0 1.0 0.52
  scale 0.5 0.5 0.5
  children [ ... ]
}
 | 
Read operations bottom-up:
- The children are scaled, rotated, then translated
 - Order is fixed, independent of field order
 
XML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
  | <Transform
    translation='-2.0 3.0 0.0'>
  <Shape>
    <Appearance>
      <Material/>
    </Appearance>
    <Cylinder
        radius='0.3'
        height='6.0'
        top='false'>
  </Shape>
</Transform>
<!-- ... -->
 | 
Classic VRML Encoding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  | Transform {
  translation -2.0 3.0 0.0
  children [
    Shape {
      appearance Appearance {
        material Material { }
      }
      geometry Cylinder {
        radius 0.3
        height 6.0
        top FALSE
      }
    }
  ]
}
...
 | 
Example
  Summary
- All shapes are built in a coordinate system
 - The Transform node creates a new coordinate system relative to its parent
 - Transform node fields do