We begin by discussing simple primitives that are specified by a few points.
One of simplist primitives is a line segment. Three dimensional line segments are determined by two end points. As you might expect all that we must do to render a 3D line is transform it's two 3D end points. The result that we get out of the transformation pipeline will be two screen space coordinates.


At this point we need all need to do is use one of the line drawing algorithms that we discussed earlier this semester to draw the 3D line's image on the raster. That was all deceptively simple. There is something really subtle happening here. While our computation for the end points was completely correct. We cannot be so sure about all of the other points on the line.
Consider the following case, where we will ignore the modeling and viewing transforms and consider only the perspective projection. It is at this point where the problem is introduced (By the way, if we used only modeling, viewing and orthographic projections there would be no problems.) Suppose we want to compute the screen space coordinate at the midpoint of a 3D line segment.

But, if we transform the end points.

The next simple 3-D object is the triangle. A triangle can be specified by its three vertices. Once again, we can transform these three vertices to compute their projection on the final raster. We can then render the triangle using the two-dimensional triangle scan conversion techniques discussed in earlier lectures.
Do the points inside the triangle (the ones we implicitly transformed) get mapped to the right place? Do you expect the triangle to have similar problems to those that the line had?
Three-dimensional triangles have an interesting distinction the 2D triangles do not. They have a tangent space. Two-dimensional triangles do have a tangent space, but they all share a common one. A tangent space is a family of 2-D vectors that all lie in a plane. In general, two 3-D triangles contain different sets tangent vectors.
It's a little cumbersome to consider all of the vectors in a tangent space as a set. Instead we usually describe the tangent space in terms of a normal vector. A normal vector is perpendicular to all of the vectors in the tangent space and it can be specified by three numbers. The tangent space of a point is very important when shading it. Thus we want to transform tangents spaces along with the points when we render triangles.
Unfortunately, normals do not transform exactly like points do... We'll discuss this problem in more detail when we get to shading.
But there is another thing that we do with normals. We fake bending triangles. Real triangles have single tangent space and hence a single normal. But we are not restricted to drawing real triangles in computer graphics. Suppose that we allow each vertex to have its own normal.