Title: Scene Graphs
1Scene Graphs
- In 3D Graphics programming the structure used is
a scene graph which is special tree structure
designed to store information about a scene. - Typical elements include
- geometries
- positional information
- lights
- fog
2Recap
- Camera paradigm for 3D viewing
- 3D viewing is similar to taking picture with
camera - 2D view of 3D scene
- Content of 2D picture will depend on
- camera parameters (position, direction, field
of view, ...), - properties of scene objects,
- illumination, ...
3Introduction
- Main steps in 3D graphics viewing
- Scene specification
- View specification
- Specification of viewing parameters
- Projection scene mapped onto 2D view window
- Clipping removal of primitives that are outside
- Display
4Coordinate Systems
- World coordinate system reference frame for
specification of (relative) position /
orientation of viewer and scene objects (size?)
Scene (head looking at bird)
5Coordinate Systems
- Viewing coordinate system reference frame for
specification of scene from viewpoint of camera /
viewer
Taking a view of scene (head looking at bird)
6Viewing Pipeline
- Coordinate transformations
- generation of 3D view involves sequence
(pipeline) of coordinate transformations
Modelling coordinates
7A scene graph is a data structure used to hold
the elements that make up a scene. It may be
either a tree or a Directed Acyclic Graph
(DAG). The tree and DAG are similar, except that
in the DAG the branches may possibly grow back
together.
8Trees
- Start at the root and move outward towards the
leaves. Normally shown with the root at the top
and the branches at the bottom. - A node is a part of this tree that may have other
nodes or leaves underneath it, a leaf cannot have
other nodes or leaves under it. - There is only one path from a leaf to the root of
the tree. There are no "cycles", if you move
outward along the branches, you never loop back
around to end up at the root again.
9Directed acyclic graph (DAG)
- Directed means that the parent-child relationship
is one-way, Acyclic means that there cant be
loops, i.e. child cant be one of its own
ancestors - Like a tree, except maybe the branches grow back
together sometimes, so that following a different
sequence of branches outwards from the root might
lead you to the exact same leaf. - Branches never grow in a loop, though, so as long
as you keep moving outwards, you always end up at
a leaf eventually
10Nodes
- The scene graph contains 'nodes' such as shape,
light, camera, etc. - The tree structure is important because it allows
the scope of influence of scene parameters to be
clear and unambiguous. - Nodes which have an unspecified number of
children below them are known as Group nodes. One
of the most important type of nodes is a
Transform Group, this modifies all of the shapes
below it by transforming them via a 4x4 matrix.
11The Scene Graph
- The scene graph captures transformations and
object-object relationships in a suitable
structure
World
Objects
Robot
Instancing(i.e, a matrix)
Body
Head
Legend
Arm
Trunk
Leg
Eye
Mouth
12Traversing the Scene Graph
- Traverse the scene graph in depth-first order,
concatenating and undoing transforms - For example, to render a robot
- Apply robot -to-head matrix
- Apply head -to-mouth matrix
- Render mouth
- Un-apply head-to-mouth matrix
- Apply head-to-left eye matrix
- Render eye
- Un-apply head-to-left eye matrix
- Apply head-to-right eye matrix
- Render eye
- Un-apply head-to-right eye matrix
- Un-apply robot-to-head matrix
- Apply robot-to-body matrix
13The Scene Graph in OpenGL
- OpenGL maintains a matrix stack of modeling and
viewing transformations
Robot
Visited
Head
Body
Unvisited
Leg
Arm
Trunk
Eye
Mouth
MatrixStack
Active
Foot
14OpenGL The Matrix Stack
- The user can save the current transformation
matrix by pushing it onto the stack with
glPushMatrix() - The user can later restore the most recently
pushed matrix with glPopMatrix() - These commands really only make sense when in
GL_MODELVIEW matrix mode
15OpenGL Matrix Stack Example
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef()
- // save translation matrix
- glPushMatrix()
- glRotatef()
- // render something translated rotated
- glCallList(foo)
- // restore pushed matrix, undoing rotation
- glPopMatrix()
- // render something else, no rotation
- glCallList(bar)
-
16Data Structures
- Lets have a look at the data structures employed
in more detail - Selection of data structures for computer
graphics often driven by need for efficiency - storage
- computation
- Trade-off between storage and computational
efficiency often applied
17Data Structures
- Data structures are required for
- scene specification
- object, polygon, point / vertex, ...
- mathematical manipulations
- vector, matrix,
- graphical display
- buffer, ...
- Typical data structures trees / scene graphs,
linked lists, arrays
18Data Structures
Linked list of objects
Linked lists of facets
- Computer graphics often use hierarchical data
structures, e.g.
Linked lists of vertices
Note other possible levels object groups,
facet groups (surfaces), edges vertex may also
link back to facets which share vertex (for
shading)
Structures with x, y, z coordinates
19Data Structures
20Data Structures
/ 3D point or vertex with integer coordinates
/ typedef struct structTag3DiPoint
int xCoordinate, / x coordinate /
yCoordinate, / y coordinate /
zCoordinate / z coordinate /
int3DPoint, / 3D point /
pInt3DPoint, / pointer to a 3D point /
int3DVertex, / 3D vertex /
pInt3DVertex / pointer to a 3D vertex /
- Possible structure for 3D point or vertex
21Data Structures
/ Polygon in 3D space / typedef struct
structTag3DiPolygon int3DVertex i3SidedPoly3
int colour, visibilityFlag
float magNormal struct structTag3DiPolygon
link2NextPolygon / Other attributes can go
here / int3DPolygon, / 3D Polygon /
pInt3DPolygon, / pointer to a 3D Polygon /
int3DFacet, / 3D facet /
pInt3DFacet / pointer to a 3D facet /
- Possible structure for polygon
22Data Structures
/ Object in 3D space / typedef struct
structTag3DiObject pInt3DFacet pFacetList
pInt3DVertex pVertexArray int numVertices
int3DPoint worldPosition struct
structTag3DiObject link2NextObject / Other
attributes can go here / int3DObject,
/ 3D Object / pInt3DObject / pointer
to a 3D Object /
- Possible structure for 3D object
23Data Structures
- To synthesise copies of an object
- master / instance architecture
- master defines generic attributes of object
- instance defines attribute values of particular
copy
24Data Structures
Instances
Masters
tm transf. matrix att attributes
25Tree structures to accommodate scene graphs
- Binary trees
- Quad trees
- Oct trees
- Child-sibling trees
26Using Modelling Software
- Maya
- 3d Studio Max
- VRML generators
27Features
- Primitives
- Groups
- Complex , irregular shapes
- Lines, Points, Facets
- Curved surfaces
- Texture mapped surfaces
- Lighting and Shading
- Interactions and Behaviours
28Primitives
- Facets constructed from known geometric
relationships - Uses polygons to map to standard mesh structure
- Scaling , shearing, rotation and translation used
to modify vertex information, vertex ordering
remains same
29Complex or Irregular objects
- Manual construction
- Lines and vertices positioned by hand/ eye
- Modification of primitives
- Extrusions
- Curved surfaces
- B-splines
- Bezier curves
- Parametric meshes
- etc
30Scene view
- Scene hierarchy required
- Must have mechanism to store results
- Output file structure must link to internal
structure - Hierarchy
- Relationship between hierarchical nodes
- Vertex list
- Vertex ordering list
- Lighting information
- Texture mapping
- May also hold recent viewing parameters
313DS File structure
- May be ASCII output
- Tags outline structures
- Must read between Tags
- Comma delimitation usually to separate vertex
list and ordering information