1 # Impress Slideshow Engine
5 The 3D transitions are slideshow transition engine using OpenGL and
6 are located in `slideshow/source/engine/OGLTrans/`. They were initially
7 written by GSOC student Shane.M.Mathews. Radek has later polished the
8 code a bit, added few new 3D transitions, added infrastructure for
9 vertex and fragment shaders. Wrote few transitions with fragment shader
12 ## Physics Animation Effects
14 Physics animation effects are simulated by external 2d physics engine
15 library `Box2D`. They don't directly call `Box2D` functions but instead
18 * `slideshow/source/inc/box2dtools.hxx`
19 * `slideshow/source/engine/box2dtools.cxx`
21 The wrapper has two corresponding classes to manage the `Box2D` world
24 When a physics animation starts, a `Box2DWorld` is initiated and
25 populated with every shape that is part of the foreground (which are
26 shapes that do not belong to the master slide and not a background
29 After creation until the end of the slide (not the whole slideshow)
30 the `Box2D` World isn't destroyed and reused. But the bodies that
31 represent the shapes in the slide get destroyed when there's a point
32 in time that there's no physics animation in progress. And recreated
33 when another physics animation starts.
35 If there are multiple physics animations in parallel only one of them
36 takes the role of stepping through the simulation.
38 If there are other animation effects that go in parallel which change
39 the shape position, rotation, or visibility - they also report the
40 change to `Box2DWorld`. These updates are collected in a queue in
41 `Box2DWorld` and processed before stepping through the simulation.
42 To achieve convincing results these updates are performed by setting
43 the `Box2D` body's linear velocity or angular velocity instead of
44 setting directly it's position or rotation.