Adds 3D contours to the current scene, using the heightmap of the 3D surface.
render_contours(
heightmap = NULL,
zscale = 1,
levels = NA,
nlevels = NA,
linewidth = 3,
color = "black",
palette = NULL,
antialias = FALSE,
offset = 0,
clear_previous = FALSE
)
A two-dimensional matrix, where each entry in the matrix is the elevation at that point. All grid points are assumed to be evenly spaced.
Default `1`. The ratio between the x and y spacing (which are assumed to be equal) and the z axis. For example, if the elevation levels are in units of 1 meter and the grid values are separated by 10 meters, `zscale` would be 10.
Default `NA`. Automatically generated with 10 levels. This argument specifies the exact height levels of each contour.
Default `NA`. Controls the auto-generation of levels. If levels is length-2, this will automatically generate `nlevels` breaks between `levels[1]` and `levels[2]`.
Default `3`. The line width.
Default `black`. Color of the line.
Default `NULL`. Overrides `color`. Either a function that returns a color palette of `n` colors, or a character vector with colors that specifies each color manually.
Default `FALSE`. If `TRUE`, the line with be have anti-aliasing applied. NOTE: anti-aliasing can cause some unpredictable behavior with transparent surfaces.
Default `5`. Offset of the track from the surface, if `altitude = NULL`.
Default `FALSE`. If `TRUE`, it will clear all existing paths.
#Add contours to the montereybay dataset
if(run_documentation()) {
montereybay %>%
height_shade() %>%
add_shadow(ray_shade(montereybay,zscale=50),0.3) %>%
plot_3d(montereybay, theta = -45, zscale=50)
render_contours(montereybay, zscale = 50, offset = 100)
render_snapshot()
}
#> Error in if (!all(temp_verts[j + 1, ] == temp_verts[j, ])) { line_scene[[line_counter]] = rayvertex::segment_mesh(start = temp_verts[j, ] - bbox_center, end = temp_verts[j + 1, ] - bbox_center, radius = temp_lwd, material = line_mat) line_counter = line_counter + 1}: missing value where TRUE/FALSE needed
if(run_documentation()) {
#Specify the number of levels
render_contours(montereybay, zscale = 50, offset = 100, nlevels = 30,
clear_previous = TRUE)
render_snapshot()
}
#> Error in if (!all(temp_verts[j + 1, ] == temp_verts[j, ])) { line_scene[[line_counter]] = rayvertex::segment_mesh(start = temp_verts[j, ] - bbox_center, end = temp_verts[j + 1, ] - bbox_center, radius = temp_lwd, material = line_mat) line_counter = line_counter + 1}: missing value where TRUE/FALSE needed
if(run_documentation()) {
#Manually specify the breaks with levels
render_contours(montereybay, linewidth = 2, offset = 100, zscale = 50,
levels = seq(-2000, 0, 100), clear_previous = TRUE)
render_snapshot()
}
#> Error in if (!all(temp_verts[j + 1, ] == temp_verts[j, ])) { line_scene[[line_counter]] = rayvertex::segment_mesh(start = temp_verts[j, ] - bbox_center, end = temp_verts[j + 1, ] - bbox_center, radius = temp_lwd, material = line_mat) line_counter = line_counter + 1}: missing value where TRUE/FALSE needed
if(run_documentation()) {
#Use a color palette for the contours
volcano |>
constant_shade() |>
plot_3d(volcano, zscale = 2, solid = FALSE, zoom = 0.8)
palette = grDevices::colorRampPalette(c("red", "purple", "pink"))
render_contours(volcano, offset = 1, palette = palette, zscale = 2, nlevels = 20)
render_snapshot()
}
#> Error in if (!all(temp_verts[j + 1, ] == temp_verts[j, ])) { line_scene[[line_counter]] = rayvertex::segment_mesh(start = temp_verts[j, ] - bbox_center, end = temp_verts[j + 1, ] - bbox_center, radius = temp_lwd, material = line_mat) line_counter = line_counter + 1}: missing value where TRUE/FALSE needed
if(run_documentation()) {
#Render using `render_highquality()` for a neon light effect
render_highquality(light = FALSE,
line_radius = 0.1, sample_method="sobol_blue",
path_material = rayrender::light, ground_size = 0,
path_material_args = list(importance_sample = FALSE,
color = "purple", intensity = 2))
}