Viewing Transformations
- Simply another set of transformations (makes use of homogeneous coordinates!)
- Applied after world space transform
- translate, rotate world into camera space
- scale, warp view frustrum into canonical view volume
- project, scale view volume onto viewport
Homogeneous Coordinates
- History
- Invented in 1827 independently by both Mòbius and Karl Wilhelm Feuerbach
- Developed more completely in 1946 by EA Maxwell
- Novel because provides insight to allow geometry to be computed algebraically
- Allows all graphics transforms to be handled uniformly
- Short summary (from OpenGL
Programming Guide by M. Woo
et al, Addison Wesley, 1999)
OpenGL works in the homogeneous coordinates of three-dimensional projective geometry, so for internal calculations, all vertices are represented with four floating-point coordinates (x, y, z, w). If w is different from zero, these coordinates correspond to the Euclidean three-dimensional point (x/w, y/w, z/w). You can specify the w coordinate in OpenGL commands, but that's rarely done. If the w coordinate isn't specified, it's understood to be 1.0.
- Motivation (from A
Unified Algebraic Framework for Classical Geometry by D Hestenes et
al, Springer 1999)
The standard algebraic model for Euclidean space En is an n-dimensional real vector space Rn or, equivalently, a set of real coordinates. One trouble with this model is that, algebraically, the origin is a distinguished element, whereas all the points of En are identical. This deficiency in the vector space model was corrected early in the 19th century by removing the origin from the plane and placing it one dimension higher. Formally, that was done by introducing homogeneous coordinates. The vector space model also lacks adequate representation for Euclidean points or lines at infinity. We solve both problems here with a new model for En employing the tools of geometric algebra. We call it the homogeneous model of En.
- Relationship between points and vectors in homogeneous coordinates
As long as w is nonzero, the homogeneous vertex (x, y, z, w)T corresponds to the three-dimensional point (x/w, y/w, z/w)T. If w = 0.0, it corresponds to no Euclidean point, but rather to some idealized "point at infinity." To understand this point at infinity, consider the point (1, 2, 0, 0), and note that the sequence of points (1, 2, 0, 1), (1, 2, 0, 0.01), and (1, 2.0, 0.0, 0.0001), corresponds to the Euclidean points (1, 2), (100, 200), and (10000, 20000). This sequence represents points rapidly moving toward infinity along the line 2x = y. Thus, you can think of (1, 2, 0, 0) as the point at infinity in the direction of that line.
If we homogenize the point (divide by W), we get a point of the form (x, y, 1). Thus, the homogenized points form a plane defined by the equation W = 1 in (x, y, W)-space.
References
- Notes on viewing by Steve Marschner
- Notes on viewing by Pankaj Agarwal
- Martin Kemp, The Science of Art, Yale University Press, 1989
- Carlbom, Ingrid and joseph Paciorek, "Planar Geometric Projections and Viewing Transformations', ACM Computing Surveys, 10(4), 1978, pp. 465-502.