surface3d.Rd
Adds a surface to the current scene. The surface is defined by a matrix defining the height of each grid point and two vectors or matrices defining the grid.
surface3d(x, y, z, ...,
normal_x = NULL, normal_y = NULL, normal_z = NULL,
texture_s=NULL, texture_t=NULL, flip = FALSE)
vectors or matrices of values. See Details.
Material properties. See material3d
for details.
matrices giving the coordinates of normals at each grid point
matrices giving the texture coordinates at each grid point
flip definition of “up”
Adds a surface mesh to the current scene. The surface is
typically defined by a matrix of height values in z
(as in persp
),
but any of x
, y
, or z
may be matrices or
vectors, as long as at least one is a matrix. (One
historical exception is allowed: if all are vectors but
the length of z
is the product of the lengths of
x
and y
, z
is converted to a matrix.)
Dimensions of all matrices must match.
If any of the coordinates are vectors, they are interpreted as follows:
If x
is a vector, it corresponds to rows of the matrix.
If y
is a vector, it corresponds to columns
of the matrix.
If z
is a vector, it corresponds to columns
unless y
is also a vector, in which case it corresponds
to rows.
If the normals are not supplied, they will be calculated automatically based on neighbouring points.
Texture coordinates run from 0 to 1 over each dimension of the texture bitmap. If texture coordinates are not supplied, they will be calculated to render the texture exactly once over the grid. Values greater than 1 can be used to repeat the texture over the surface.
surface3d
always tries to draw the surface with the `front' upwards
(typically towards higher z
values). This can be used to render
the top and bottom differently; see material3d
and
the example below. If you don't like its choice, set
flip = TRUE
to use the opposition definition.
NA
values in the height matrix are not drawn.
See persp3d
for a higher level interface.
#
# volcano example taken from "persp"
#
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(z)
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")
3D plot