# subdivision3d

##### generic subdivision surface method

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).

- Keywords
- dynamic

##### Usage

```
subdivision3d( x, ...)
# S3 method for 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 )
```

##### Arguments

- x
3d geometry mesh

- mesh
3d geometry mesh

- depth
recursion depth

- normalize
normalize mesh3d coordinates after division if

`deform`

is`TRUE`

- 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)

##### Details

`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.)

##### See Also

##### Examples

```
# NOT RUN {
open3d()
shade3d( subdivision3d( cube3d(), depth = 3 ), color = "red", alpha = 0.5 )
# }
```

*Documentation reproduced from package rgl, version 0.100.54, License: GPL*