Points outside the view frustum must be clipped. The clipping could be done in almost any coordinate system, but it's best to do clipping in the CCS because:
In the figure below, the segment pq in the VCS is transformed to the segment p′q′ in the NDCS. If we clip p′q′, the segment will appear to be exiting the far plane of the canonical view volume. But it should really exit the top plane!
For example, if q=[0,0,100,1]T and n=1,f=2,r=+1,l=−1,t=+1,b=−1 then q is behind the viewpoint (as above) and the projection matrix is
[1000010000−3−400−10]
Then q′=Pq=[x′,y′,z′,w′]T=[0,0,−304,−100]T and, upon division by w′ we get [0,0,3.04]T, which is ahead of the viewer instead of behind, as the original q was.
For a better intuition, consider what happens to q′ as q is moved along the z axis of the VCS:
If the point were in NDCS, we would clip against the six planes that define the faces of the canonical view volume:
The corresponding planes in the CCS are:
Given a segment p′q′ in the CCS, we clip against each of the six planes. Note that these are planes in a 4D homogeneous space, but clipping works the same in any dimension, as we'll see below.
A line segment ab has endpoints a and b. It can be written in parametric form as
For t∈[0,1], ℓ(t) is between a and b. For t outside this interval, ℓ(t) is not on the segment ab.
A plane π is defined by a normal, n, and a distance from the origin, d. All points x on the plane satisfy the implicit equation
Points above the plane (i.e. on the side of the plane that n points to) will have π(x)>0. Points below the plane will have π(x)<0.
Segment ab is clipped by the plane if and only if its endpoints lie on different sides of the plane. So compute π(a) and π(b). Then ab intesects π if and only if π(a) and π(b) have different signs. (If one or both are equal to zero, ab is not clipped because it does not cross the plane.)
If ab is clipped by π, we need to find the point at which ab intersects π, to clip ab at that point.
To find the point of intersection, substitute the parametric segment equation into the implicit plane equation and solve for the parameter t:
Then the intersection point is ℓ(t).