Note: this is joint work with Karan Singh of the University of Toronto.
Camera
control is a surprisingly difficult task, in part because the user
must solve an inverse problem - how to position and orient the camera
so that it projects the scene the way they want. Games take advantage
of the fact that the viewer is typically a character navigating the
scene to constrain the problem; the user has control over the viewing
direction, which in turn constrains the direction of camera
motion. Traditional 3D systems, such as Maya, employ over-loaded mouse
buttons to move the camera in specific ways, such as translating the
camera along the view vector. The user can also visualize the camera
as another element in the 3D scene.
The IBar is a
screen-space widget that performs all of the standard camera
operators, plus provides intuitive control over the internal
camera parameters, i.e., the perspective distortion. The IBar is a
projection of the edge of a cube. By changing the IBar's projection in
the screen, the user indicates how they would like the camera to
change. One beneficial side effect of this interaction mode is that it
requires only one mouse button, and the user can still "click through"
the IBar to edit the scene.
The IBar is very useful for
visualizing the camera projection, but it is a bit overwhelming for
novice users. The Cube
widget is an alternative approach that splits the functionality
into three views of the cube. Additional cues, such as ghosting and
pie menus, help the novice user learn how the cube widget works. It
also supports much better control of the rotation point, and the
zoom-dolly fixed point.
See also camera interpolation and non-linear projection.
IBar C++ implementation, complete with Windows executable.
IBar Maya implementation.