A mesh object can have the same vertex listed twice. Each copy is allowed to have separate normals, texture coordinates, and color. However, it is more efficient to have just a single copy if those differences aren't needed. For automatic smoothing using addNormals, triangles and quads need to share vertices. This function merges identical (or similar) vertices to achieve this.

mergeVertices(mesh, 
              notEqual = NULL, 
              attribute = "vertices", 
              tolerance = sqrt(.Machine$double.eps))

Arguments

mesh

A mesh3d object.

notEqual

A logical matrix indicating that certain pairs should not be merged even if they appear identical.

attribute

Which attribute(s) should be considered in comparing vertices? A vector chosen from c("vertices", "colors", "normals", "texcoords"))

tolerance

When comparing vertices using all.equal, this tolerance will be used to ignore rounding error.

Value

A new mesh object.

Author

Duncan Murdoch

See also

as.mesh3d.rglId, which often constructs mesh objects containing a lot of duplication.

Examples

open3d()
(mesh1 <- cuboctahedron3d(col = rainbow(14), meshColor = "face"))
#>  mesh3d object with 12 vertices, 8 triangles, 6 quads.
id <- shade3d(mesh1)
(mesh2 <- as.mesh3d(id))
#>  mesh3d object with 48 vertices, 20 triangles.
shade3d(translate3d(mesh2, 3, 0, 0))
(mesh3 <- mergeVertices(mesh2))
#>  mesh3d object with 12 vertices, 20 triangles.
shade3d(translate3d(mesh3, 6, 0, 0))