# Perspective Projection

#### General projections from 1D to 1D

1. Put the projection point anywhere
• on one of the lines.
• at infinity
2. The general form of a projection
• Mobius transformation: x' = (a*x + b ) / ( c*x + d )
3. Matrix form of the Mobius transformation
```/     \
| a b |
| c d |
\     /```

The most basic Mobius transformation

```/     \
| 1 0 |
| c 1 |
\     /```

What does it do?

ininfity -> 1/c

-1/c -> infinity

#### Projection from 2D to 2D

Draw two planes and a point of projection in 2D.

• general projections

The most basic general projection

```/       \
| 1 0 0 |
| 0 1 0 |
| a b 1 |
\       /```

The Mobius form

• x -> x / (ax + by + 1)
• y -> y / (ax + by + 1)

Where things go

1. (0, 0) -> (0, 0)
2. x = infinity -> (1/a, 0)
3. y = infinity -> (0, 1/b)
4. ax + by +1 = 0 -> (x, y) -> (infinity, infinity)

What is this (infinity, infinity)?

• In homogeneous coordinates it looks like (x, y, 0).
• This is just a vector; the vectors are directions pointing in different directions to infinity.
• The line ax + by + 1 = 0 maps to infinity in both directions
5. Ax + By = infinity: (x, y) -> (A, B, aB + bA )

We don't want to throw away z, so we'll do a 2D to 2D projection:

• view frustrum to cube centred on the origin

That is,

1. Near plane goes to z' = -1.
2. Far plane goes to z' = 1
3. Top plane goes to x' = 1
4. Bottom plane goes to x' = -1

Represent the Mobius transformation as a matrix

```/       \
| a b c |
| d e f |
| g h i |
\       /```

Then, using the code

1. zn: z coordinate of the near plane
2. zf: z coordinate of the far plane
3. mu: slope of the upper limit of the frustrum
4. md: slope of the lower limit of the frustrum

we can map the four planes.

1. (x, zn, 1 ) -> (sx', -s, s )
2. (x, zf, 1 ) -> (tx'', t, t )
3. (mu*z, z, 1 ) -> (u, uz', u )
4. (md*z, z, 1 ) -> (-v, vz'', v )

Each of these gives two ordinary linear equations. (Why?) Just the right number. (Why?) Solve them.

The result is

```/                                               \
| 1 (mu + md) / (mu - md)           0           |
| 0 (zf + fn) / (zf - zn)  -2*zf*zn / (zf - zn) |
| 0           1                     0           |
\                                               /```

Exercise. Check that this matrix creates the correct Mobius transformation.

Exercise. Compare this matrix to the one in the notes. It should be the same with the y row and column deleted. Why is it different?

Exercise. Solve the equations.

Exercise. Show that our 2D to 2D projection, followed by orthogonal projection is the same as the 2D to 1D projection just above.

Exercise. Extend these results to 3D, and compare to the matrices given in the notes.

#### Properties of this Projection

z' -> (z*(zf + zn) -2*zf*zn ) / z*(zf - zn)

1. z = zf
2. z = zn
3. What maps to zero? z' = 2*zf*zn / (zf + zn )

Note the possible numeric problems.

4. z -> +0
5. z -> -0

z -> infinity, z' = (zf + zn) / (zf - zn)

#### Projection from 2D to 1D

We can draw it in 2D (Why?)

1. three components:
1. plane, containing the stuff to be projected
2. line, onto which the stuff will be projected
3. point of projection

all must lie in the same plane

2. projection point in/out of the plane
3. line in out/of the plane

How is it done?

1. Define a coordinate frame, the view coordinates,
1. origin at the projection point
2. z-axis perpendicular to the line
3. x-axis parallel to the line
2. Transform points in the plane into view coordinates
1. (xw, zw, 1) -> (xv, zv, 1) using an affine transformation
2. In the view coordinates, x' = z' * ( xv / zv )
3. But xv = a * xw + b * zw + c, and zv = d * xw + e * zw + f
4. Once again we have a Mobius transformation