Subdivide a mesh
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).
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: 4 x n 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.)
open3d() shade3d( subdivision3d( cube3d(), depth = 3 ), color = "red", alpha = 0.5 )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.