R: add height-field surface shape

surface3d {rgl} | R Documentation

## add height-field surface shape

### Description

Adds a surface to the current scene. The surface is defined by a matrix defining the height of each grid point and two vectors defining the grid.

### Usage

    surface3d(x, y, z, ..., normal_x = NULL, normal_y = NULL, normal_z = NULL)
    terrain3d(x, y, z, ..., normal_x = NULL, normal_y = NULL, normal_z = NULL)

### Arguments

`x` | values corresponding to rows of `z`, or matrix of x coordinates
`y` | values corresponding to the columns of `z`, or matrix of y coordinates
`z` | matrix of heights
`...` | Material and texture properties. See `rgl.material` for details.
`normal_x, normal_y, normal_z` | matrices of the same dimension as `z` giving the coordinates of normals at each grid point

### Details

Adds a surface mesh to the current scene. The surface is defined by the matrix of height values in `z`, with rows corresponding to the values in `x` and columns corresponding to the values in `y`. This is the same parametrization as used in `persp`.

If the `x` or `y` argument is a matrix, then it must be of the same dimension as `z`, and the values in the matrix will be used for the corresponding coordinates. This is used to plot shapes such as cylinders where z is not a function of x and y.

If the normals are not supplied, they will be calculated automatically based on neighbouring points.

`surface3d` always draws the surface with the ‘front’ upwards (i.e. towards higher `z` values). This can be used to render the top and bottom differently; see `rgl.material` and the example below.

For more flexibility in defining the surface, use `rgl.surface`.

`surface3d` and `terrain3d` are synonyms.

### See Also

`rgl.material`, `rgl.surface`. See `persp3d` for a higher level interface.

### Examples

    #
    # volcano example taken from "persp"
    #

    data(volcano)

    z <- 2 * volcano        # Exaggerate the relief

    x <- 10 * (1:nrow(z))   # 10 meter spacing (S to N)
    y <- 10 * (1:ncol(z))   # 10 meter spacing (E to W)

    zlim <- range(y)
    zlen <- zlim[2] - zlim[1] + 1

    colorlut <- terrain.colors(zlen) # height color lookup table

    col <- colorlut[ z - zlim[1] + 1 ] # assign colors to heights for each point

    open3d()
    surface3d(x, y, z, color = col, back = "lines")

[Package rgl version 0.99.9 Index]