There are two types of surfaces that are commonly used in modeling systems,
* parametric* and

where parametersf(u,v) = (x(u,v),y(u,v),z(u,v) )

Implicit surfaces, on the other hand, are defined by a polynomial of three variables:

Similar to curves, ifp(x,y,z) = 0

Here are a few technical terms. Surfaces which have polynomial
(implicit) forms are called * algebraic surfaces*. The highest
degree of all terms is the degree of the algebraic surface. Therefore,
spheres and all quadric surfaces are algebraic surfaces of degree two,
while torus is a degree four algebraic surface. The following shows
a degree 3 algebraic surface whose implicit equation is

8x^{2}-xy^{2}+xz^{2}+y^{2}+z^{2}- 8 = 0

Some algebraic surfaces have rational parametric forms such as spheres and
all quadric surfaces. This type of algebraic surfaces are called
** rational** algebraic surfaces. Theoretically, given an
algebraic surface in rational parametric form, it is always possible to
eliminate parameters

To compute the tangent and normal vector at a point (*u*,*v*) in
the domain, we need the partial derivatives. Suppose the parametric
surface is defined as follows:

The partial derivatives with respect to *u* and *v* are the
tangent vectors at **f**(*u*,*v*):

In the above, the left one is the tangent vector in the *u*-direction
while the right one is the tangent vector in the *v*-direction. The
normal vector at **f**(*u*,*v*),
**n**(*u*,*v*), is the cross-product of these partial
derivatives using the right-handed rule:

A parametric surface patch can be considered as a union of (infinite number)
of curves. There are many ways to form these unions of curves; but, the
simplest one is the so-called * isoparametric curves*.
Given a parametric surface

These isoparametric curves can help to render the surface. In many applications, a parametric surface is "triangulated" (or polygonized or tessellated) into triangles or polygons. Then, these triangles and polygons can be rendered very efficiently with existing graphics programming libraries such as OpenGL and PHIGS PLUS.

Instead of triangulating the surface, it would be easier to triangulate the
domain of (*u*,*v*). We can subdivide the *u*-direction
into *m* segments with *u*_{0}=0, *u*_{1},
..., *u*_{i}, ..., *u*_{m}=1 and
subdivide the *v*-direction into *n* segments with
*v*_{0}=0, *v*_{1},
..., *v*_{j}, ..., *u*_{n}=1.
The domain is subdivided into *m*×n rectangles, each of
which can be further subdivided into two triangles.

Suppose *u*_{i} and *u*_{i+1} are
two consecutive division points in the *u*-direction and
*v*_{j} and *v*_{j+1} in the
*v*-direction as shown above. We have a rectangle in the domain
with vertices (*u*_{i},*v*_{j}),
(*u*_{i+1},*v*_{j}),
(*u*_{i+1},*v*_{j+1}) and
(*u*_{i},*v*_{j+1}). We have two
ways to obtain the triangles because this rectangle has two diagonals.
Let us follow the figure shown above. The first triangle is defined by
(*u*_{i},*v*_{j}),
(*u*_{i+1},*v*_{j}) and
(*u*_{i},*v*_{j+1}) and the
second triangle is defined by
(*u*_{i+1},*v*_{j}),
(*u*_{i+1},*v*_{j+1}) and
(*u*_{i},*v*_{j+1}).

Consider the triangle defined by
(*u*_{i},*v*_{j}),
(*u*_{i+1},*v*_{j}) and
(*u*_{i},*v*_{j+1}).
These three points are mapped to three points on the surface
**f**(*u*_{i},*v*_{j}),
**f**(*u*_{i+1},*v*_{j}) and
**f**(*u*_{i},*v*_{j+1}) with
normal vectors
**n**(*u*_{i},*v*_{j}),
**n**(*u*_{i+1},*v*_{j}) and
**n**(*u*_{i},*v*_{j+1}).
Now, we have three vertices each of which has a normal vector. These six
pieces of information are sufficient to render the triangle smoothly.
As a result, we have a method for rendering a parametric surface. Or,
put it in another way, we have a method for generating a set of triangles
that approximate the given parametric surface. This approximation may not
be a good one because it could have too many triangles and some of these
triangles may be in wrong positions or too small. This situation, however,
can be improved by an "adaptive" technique. An adaptive technique
dynamically adjusts the sizes, the number and the positions of triangles.

In addition to blending, many applications and computations such as
offsetting naturally generate algebraic surfaces. In fact, in many
cases, algebraic surfaces are very useful. Point classification is
a good example. * Point classification* determines if a given
point lies inside, on or outside of a surface. It is not easy to design
an algorithm for parametric surface; however, for implicit surfaces it is
a simple matter. Suppose the given point is (

One can easily compute the normal vector of an algebraic surface.
In fact, the formal vector of a polynomial
*p*(*x*,*y*,*z*) = 0 is simply its gradient:

Once we have the normal vector at a point, the tangent plane can be easily computed.

Unfortunately, displaying an algebraic surface is not easy. The easiest
but also the most time consuming way is raytracing. Many raytracers allow
users to specify an implicit equation. POVRAY and Radiance are good
examples. However, raytracing is very slow. Another possibility is
triangulating the surface which is similar to what we did earlier for
parametric surfaces. For implicit surfaces, however, situation is different
because we do not have a domain to triangulate. More precisely,
triangulation must be carried out directly on the surface. Programs that
can subdivide an implicit surface into polygons (not necessarily triangles)
are usually referred to as * polygonizers*. Developing such
polygonizers is not an easy job and is still a research problem.

The following surfaces are generated from a well-known polygonizer by Jules Bloomenthal which has been incorporated into our surface system. The left surface is a hyperbolic paraboloid and the right one is a ring Dupin cyclide which is a degree 4 rational surface. These two surfaces are triangulated into a large number of small triangles each of which is colored with a random color. However, it is not necessary to have such a large number of triangles.

The first is a cubic surface whose equation is

The gradient of this surface isx^{2}+y^{3}-y^{2}+z^{2}= 0

( 2Therefore, (0,0,0) is a singular point because at this point all components of the gradient are zero. This is the indicated point on the surface. Note that there is another singular point at (0,2/3,0).x, 3y^{2}- 2y, 2z)

The middle figure has an equation as follows:

-This surface has the following gradient vectorx^{3}+ 2xz-yz^{2}= 0

( -2From the second component, we have eitherx^{2}+ 2z, -2yz, 2x-y^{2})

While the first two cases have only isolated singular points, singular points can be on a line or even on a curve. Let us consider the right figure above which has the following equation:

-This surface has the following gradient vectorx^{2}y+x^{2}-yz^{2}-z^{2}= 0

( -2Ifxy+2x, -(x^{2}+z^{2}), -2z)