Parametric Surfaces in POV-Ray (work in progress)

By Xah Lee. Date:

This page shows you POV-Ray's syntax for parametric surfaces (math). If you don't know POV-Ray, please see Intro to POV-Ray.

The “mesh” Patch

The “mesh” primitive is just a list of triangles, as simple as that. Here's a example:

3 triangles, made by the “mesh” keyword. Note that triangles need not share vertex or edge. Source: 〔mesh.pov 〕.

Here's the syntax for the mesh primitive:

#declare c1 = texture {pigment {color Red}}
#declare c2 = texture {pigment {color Green}}
#declare c3 = texture {pigment {color Blue}}

 triangle{<0,0,0>,<1,0,0>,<0,0,1> texture { c1 }}
 triangle{<1,0,0>,<0,0,1>,<1,.3,1> texture { c2 }}
 triangle{<-0.1,0,0>,<-0.1,0,1.2>,<-0.1,1.2,0.7> texture { c3 }}
 translate <0,.1,0>

Note that in the mesh primitive, texture must be predefined. This is just how POV-Ray is.

The “mesh2” Primitive

In a parametric surface, the list of triangles making up the surface share edges and vertexes. If we were to save the surface data as a list of triangles, there will a lot of repetitions of the vertex coordinates. It would be much more efficient, to simply store all the vertexes in a surface as a list, and store another list that specifies which of vertexes are connected to form a triangle.

In POV-Ray, there's a “mesh2” primitive, that stores a surface as a list of vertexes and a list of faces, using indexes of the vertex list. Here's a example:

mesh2 {
  vertex_vectors {
    4 /* number of vertexes*/,
    <0,0,0>, <1,0,0>, <1,0.3,1>, <0,0,1> // a listing of the vertex
  face_indices {
    2 /* number of faces*/,
    <0,1,3>, /*indexes from the vertex_vectors list*/

In the above, the mesh2 primitive has vertex_vectors{} and face_indices{} as components. In vertex_vectors, it start with the number of total vertexes, following by the vertexes. In face_indices, it start by the number of faces, followed by a set of triangles, each triangle is of the form <v1,v2,v3>, where the v1, v2, v3 are the indexes from the vertex_vectors list, each representing a corner of the triangle.

2 triangles, made by the “mesh2” keyword. Note that the triangles are always edge-to-edge, forming a patch of a surface. 〔mesh2.pov

The “polygon” Patch

Height Field

Parametric Surfaces

work in progress


POV-Ray has a feature that allows you to plot isosurface. More specifically, you can use it to plot the roots of polynomial of 3 variables.

For example, the equation for a torus is (R-Sqrt[x^2+y^2])^2 +z^2 - r^2 == 0 where R is the major radius and r is the minor radius.

work in progress

If you have a question, put $5 at patreon and message me.