The subdivision surface algorithm divides and refines (deforms) a given mesh recursively to certain degree (depth). The mesh3d algorithm consists of two stages: divide and deform. The divide step generates for each triangle or quad four new triangles or quads, the deform step drags the points (refinement step).

1 2 3 4 5 6 | ```
subdivision3d( x, ...)
## S3 method for class 'mesh3d'
subdivision3d( x, depth = 1, normalize = FALSE, deform = TRUE, ... )
divide.mesh3d(mesh, vb = mesh$vb, ib = mesh$ib, it = mesh$it )
normalize.mesh3d(mesh)
deform.mesh3d(mesh, vb = mesh$vb, ib = mesh$ib, it = mesh$it )
``` |

`x` |
3d geometry mesh |

`mesh` |
3d geometry mesh |

`depth` |
recursion depth |

`normalize` |
normalize mesh3d coordinates after division if |

`deform` |
deform mesh |

`it` |
indices for triangular faces |

`ib` |
indices for quad faces |

`vb` |
matrix of vertices: 4xn matrix (rows x, y, z, h) or equivalent vector, where h indicates scaling of each plotted quad |

`...` |
other arguments (unused) |

`subdivision3d`

takes
a mesh object and replaces each triangle or quad with 4 new ones
by adding vertices half-way along the edges (and one in the
centre of a quad). The positions of the vertices are
deformed so that the resulting surface is smoother than the original. These operations are repeated `depth`

times.

The other functions do the individual steps of the subdivision.
`divide.mesh3d`

adds the extra vertices. `deform.mesh3d`

does the smoothing by replacing each vertex with the average of each of its neighbours. `normalize.mesh3d`

normalizes the homogeneous coordinates, by setting the
4th coordinate to 1. (The 4th coordinate is used as a
weight in the deform step.)

1 2 | ```
open3d()
shade3d( subdivision3d( cube3d(), depth = 3 ), color = "red", alpha = 0.5 )
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.