R: 3D Mesh objects

mesh3d {rgl} | R Documentation

## 3D Mesh objects

### Description

3D triangle and quadrangle mesh object creation and a collection of sample objects.

### Usage

      qmesh3d(vertices, indices, homogeneous = TRUE, material = NULL,
             normals = NULL, texcoords = NULL)
      tmesh3d(vertices, indices, homogeneous = TRUE, material = NULL,
             normals = NULL, texcoords = NULL)
      as.mesh3d(x, ...)

      cube3d(trans = identityMatrix(), ...)
      tetrahedron3d(trans = identityMatrix(), ...)
      octahedron3d(trans = identityMatrix(), ...)
      icosahedron3d(trans = identityMatrix(), ...)
      dodecahedron3d(trans = identityMatrix(), ...)
      cuboctahedron3d(trans = identityMatrix(), ...)

      oh3d(trans = identityMatrix(), ...)    # an 'o' object

      dot3d(x, ...)   # draw dots at the vertices of an object
      ## S3 method for class 'mesh3d'
    dot3d(x, override = TRUE, ...)
      wire3d(x, ...)  # draw a wireframe object
      ## S3 method for class 'mesh3d'
    wire3d(x, override = TRUE, ...)
      shade3d(x, ...) # draw a shaded object
      ## S3 method for class 'mesh3d'
    shade3d(x, override = TRUE, ...)

### Arguments

`x` | a `mesh3d` object (class `qmesh3d` or `tmesh3d`), or for `as.mesh3d` an object with a method defined.
`vertices` | 3- or 4-component vector of coordinates
`indices` | 4-component vector of vertex indices
`homogeneous` | logical indicating if homogeneous (four component) coordinates are used.
`material` | material properties for later rendering
`normals` | normals at each vertex
`texcoords` | texture coordinates at each vertex
`trans` | transformation to apply to objects; see below for defaults
`...` | additional rendering parameters
`override` | should the parameters specified here override those stored in the object?

### Details

These functions create and work with `mesh3d` objects, which consist of a matrix of vertex coordinates together with a matrix of indices indicating which vertex is part of which face. Such objects may have triangular faces, planar quadrilateral faces, or both.

The `as.mesh3d` function is generic; currently the only method defined is `as.mesh3d.deldir`.

The sample objects optionally take a matrix transformation `trans` as an argument. This transformation is applied to all vertices of the default shape. The default is an identity transformation.

The `"shape3d"` class is a general class for shapes that can be plotted by `dot3d`, `wire3d` or `shade3d`.

The `"mesh3d"` class is a class of objects that form meshes: the vertices are in member `vb`, as a 3 or 4 by `n` matrix. Meshes with triangular faces will contain `it`, a `3 * n` matrix giving the indices of the vertices in each face. Quad meshes will have vertex indices in `ib`, a `4 * n` matrix.

### Value

`qmesh3d`, `cube3d`, `oh3d`, `tmesh3d`, `tetrahedron3d`, `octahedron3d`, `icosahedron3d` and `dodecahedron3d` return objects of class `c("mesh3d", "shape3d")`. The first three of these are quad meshes, the rest are triangle meshes.

`dot3d`, `wire3d`, and `shade3d` are called for their side effect of drawing an object into the scene; they return an object ID (or vector of IDs, for some classes) invisibly.

See `rgl.primitive` for a discussion of texture coordinates.

### See Also

`r3d`, `par3d`, `shapelist3d` for multiple shapes

### Examples

      # generate a quad mesh object

      vertices <- c(
         -1.0, -1.0, 0, 1.0,
          1.0, -1.0, 0, 1.0,
          1.0,  1.0, 0, 1.0,
         -1.0,  1.0, 0, 1.0
      )
      indices <- c( 1, 2, 3, 4 )

      open3d()
      wire3d( qmesh3d(vertices, indices) )

      # render 4 meshes vertically in the current view

      open3d()
      bg3d("gray")
      l0 <- oh3d(tran = par3d("userMatrix"), color = "green" )
      shade3d( translate3d( l0, -6, 0, 0 ))
      l1 <- subdivision3d( l0 )
      shade3d( translate3d( l1 , -2, 0, 0 ), color = "red", override = FALSE )
      l2 <- subdivision3d( l1 )
      shade3d( translate3d( l2 , 2, 0, 0 ), color = "red", override = TRUE )
      l3 <- subdivision3d( l2 )
      shade3d( translate3d( l3 , 6, 0, 0 ), color = "red" )

      # render all of the Platonic solids
      open3d()
      shade3d( translate3d( tetrahedron3d(col = "red"), 0, 0, 0) )
      shade3d( translate3d( cube3d(col = "green"), 3, 0, 0) )
      shade3d( translate3d( octahedron3d(col = "blue"), 6, 0, 0) )
      shade3d( translate3d( dodecahedron3d(col = "cyan"), 9, 0, 0) )
      shade3d( translate3d( icosahedron3d(col = "magenta"), 12, 0, 0) )

[Package rgl version 0.99.9 Index]