# 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

1 2 |

### Arguments

` x ` |
values corresponding to rows of |

` y ` |
values corresponding to the columns of |

` z ` |
matrix of heights |

` ... ` |
Material and texture properties. See |

`normal_x, normal_y, normal_z` |
matrices of the same dimension as |

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ```
#
# 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")
``` |